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 จำนวน X1,X2,X3.,,,Xn และ response variable Y รูปแบบความสัมพันธ์ Multiple linear regression เขียนได้ตามนี้

 Data=Fit+Residual(0)

เมื่อ Fit คือ β0+β1X1+β2X2+β3X3+...+βnXn

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

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

Y=β0+β1X1+β2X2+β3X3+...+βnXn+ϵ(1)

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

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

Y=β0+β1X+β2X2(2)

Y=β0+β1X1+β2X1X2(3)

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

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

Hyperplane 

Y=X1+X2
 เมื่อ X2=0 แล้วจะเหลือ X1 ที่ส่งผลต่อค่าของ  Y เมื่อนำค่าทั้งสาม X1,X2,Y มา plot กราฟจะได้ภาพที่มีลักษณะเหมือนกับสี่เหลี่ยมผืนผ้า เรียกว่า hyperplane  ใน R3





เมื่อกำหนดให้ X1=0 จะได้



เมื่อ X10,X20 แต่มี weight เท่ากัน



เมื่อ X1,X2 มีน้ำหนักไม่เท่ากัน เช่น Y=10X1+X2
หรือ Y=X1+10X2

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

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

Y=X1X2


Y=X12




ตัวอย่าง
ดาวน์โหลดข้อมูลเรื่อง 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

ความคิดเห็น