Linear Regression : Multiple Linear Regression



ใน Simple linear regression กล่าวถึงความสัมพันธ์แบบ 1 : 1 ระหว่าง predictor variable และ response variable  แต่ใน Multiple linear regression จะมองความสัมพันธ์แบบ 1 :  many ระหว่าง response variable  กับ predictor variables

ถ้ามี predictor variable จำนวน K จำนวน \( X_1,X_2,X_3.,,,X_n\) และ response variable \( Y\) รูปแบบความสัมพันธ์ Multiple linear regression เขียนได้ตามนี้

 \( Data = Fit + Residual\dashrightarrow(0)\)

เมื่อ Fit คือ \(\large \bf  \beta_0 + \beta_{1}X_{1}+ \beta_{2}X_{2}+ \beta_{3}X_{3}+ ...+\beta_{n}X_{n} \)

Residual คือ ความต่างระหว่างค่าของ response variable ที่สังเกตุได้จริงกับค่าที่จากการคำนวณ มักเขียนแทนด้วย  \( \large \bf \epsilon \)

สมการรูปแบบของ Multiple linear regression คือ

\(\large \bf  Y = \beta_0 + \beta_{1}X_{1}+ \beta_{2}X_{2}+ \beta_{3}X_{3}+ ...+\beta_{n}X_{n}  + \epsilon \dashrightarrow(1)\)

ความสัมพันธ์ในรูปแบบของ Multiple linear regression ที่พบเห็นได้ เช่น ความสูงของคนขึ้นกับหลายปัจจัย ได้แก่ อาหาร ความสูงของพ่อ-แม่ ภาวะโรคบางอย่าง หรือ ราคาที่อยู่อาศัยขึ้นกับสภาพที่อยู่อาศัย ทำเล ภาวะทางเศรษฐกิจ อัตราดอกเบี้ย เป็นต้น
Multiple linear regression ต่างจาก Multiple variables regression ตรงที่ Multiple variables regression กล่าวถึงความสัมพันธ์แบบ many : many ระหว่าง response variables กับ predictor variables

นอกจากนี้ยังหมายถึงรูปแบบที่ของ polynomial ได้อีก เช่น

\(\large \bf Y = \beta_0 + \beta_{1}X+ \beta_{2}X^2 \dashrightarrow(2)\)

\(\large \bf Y = \beta_0 + \beta_{1}X_{1}+ \beta_{2}X_{1}X_{2} \dashrightarrow(3)\)

รูปแบบ  (2) และ (3) ถูกมองว่าเป็น Linear regression ได้ ถ้าขณะนั้นกำลังพิจารณว่า \( \beta \) เป็น predictor variable และ X เป็น  weight ซึ่งการพิจารณาในทำนองนี้ก็จะมองเป็น Linear ได้

ในตอนนี้จะกล่าวถึง simple multiple linear regression ตามรูปแบบสมการ (1)

Hyperplane 

\(\large \bf Y = X_1+X_2 \)
 เมื่อ \( X_2 = 0\) แล้วจะเหลือ \(X_1 \) ที่ส่งผลต่อค่าของ  Y เมื่อนำค่าทั้งสาม \(X_1, X_2 ,Y\) มา plot กราฟจะได้ภาพที่มีลักษณะเหมือนกับสี่เหลี่ยมผืนผ้า เรียกว่า hyperplane  ใน \( R^3 \)





เมื่อกำหนดให้ \( X_1 = 0 \) จะได้



เมื่อ \( X_1 \neq 0, X_2 \neq 0\) แต่มี weight เท่ากัน



เมื่อ \( X_1,X_2\) มีน้ำหนักไม่เท่ากัน เช่น \( Y = 10X_1+X_2\)
หรือ \( Y = X_1+10X_2\)

จะเห็นว่าโครงสร้างของ Hyplane จะได้รับอิทธิพลจาก predictor variable ที่มีน้ำหนักมากกว่าตัวที่มีน้ำหนักน้อย

จะขอยกตัวอย่าง Hyperplane ที่ได้จากสมการ polynomial regression ให้ดูเพื่อจะได้เห็นความต่างที่ชัดเจนเมื่อเทียบกับ Multiple linear regression

\( Y = X_{1}X_{2}\)


\( Y = X_{1}^2\)




ตัวอย่าง
ดาวน์โหลดข้อมูลเรื่อง Red Wine Quality จาก https://archive.ics.uci.edu/ml/datasets/wine+quality  ข้อมูลชุดนี้มีทั้งหมด 1600 รายการ predictor variables มีทั้งหมด 11 ตัวแปร [2] ที่จะส่งผลต่อคุณภาพของ Red Wine



import numpy as np

data_file = "winequality-red_2.csv"
data  = np.genfromtxt(data_file,delimiter=",")

fa = data[:,0] #fixed acidity 
va = data[:,1] #- volatile acidity 
ca = data[:,2] #3 - citric acid 
rs = data[:,3] #4 - residual sugar 
ch = data[:,4] #5 - chlorides 
fsd = data[:,5] #6 - free sulfur dioxide 
tsd = data[:,6] #7 - total sulfur dioxide 
de = data[:,7] #8 - density 
ph = data[:,8] #9 - pH 
sp = data[:,9] #10 - sulphates 
al = data[:,10] #11 - alcohol 
target= data[:,11] # quality [0,10]


#create matrices
col_0 = np.ones(len(target))
temp = np.dstack((col_0,fa,va,ca,rs,ch,fsd,tsd,de,ph,sp,al))
X_mat = temp[0] # just tricky

# according to equation 3, separating equation into 2 parts may be good idea.!
part_1 = np.linalg.inv(np.dot(X_mat.T,X_mat))
part_2 = np.dot(X_mat.T,target)

# then combine part_1 and part_2 together with np.dot()
beta = np.dot(part_1,part_2) # beta should contains [c,a]

print(beta) 
# 2.19652084e+01  2.49905527e-02 -1.08359026e+00 -1.82563948e-01
#  1.63312698e-02 -1.87422516e+00  4.36133331e-03 -3.26457970e-03
# -1.78811638e+01 -4.13653144e-01  9.16334413e-01  2.76197699e-01]

#Find sum sqaure error
predictand = beta[0]+ beta[1]*fa + beta[2]*va + beta[3]*ca \
            + beta[4]*rs + beta[5]*ch + beta[6]*fsd + beta[7]*tsd \
            +beta[8]*de +beta[9]*ph +beta[10]*sp +beta[11]*al  
sum_sqr_error = 0
for i in range(len(predictand)) :
 e = predictand[i] - target[i]
 sum_sqr_error+=e**2 
 
print(sum_sqr_error) #666.4107003870303

 


residual หรือ ค่าความต่างระหว่างค่าที่ได้จากสมการเทียบกับค่าที่ได้จากการสังเกตุ มีการกระจุกตัวอยู่ใกล้กับศุนย์


เอกสารอ้างอิง

[1] https://somchaisom.blogspot.com/2018/07/linear-regression-simple-linear.html
[2] https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality.names

ความคิดเห็น