multiple linear regression

Multiple linear regression

สวัสดีค่ะเพื่อนๆ กลับมาเจอกันอีกครั้งแล้วนะคะ จากครั้งที่แล้วเราได้ทำการประมาณแบบ Simple linear regression กันไป ในครั้งนี้เราจะมาทำการประมาณการข้อมูลแบบ Multiple linear regression ซึ่งมีหัวข้อที่ต้องรู้ต่างๆดังนี้

  1. การประมาณการแบบ Multiple linear regression
  2. สมการ Cost function
  3. หาสมการประมาณการที่แม่นยำด้วย Gradient descent
    • Gradient descent apply กับ multiple linear regression
    • Grdient descent approach
    • Grdient descent = 0 

1. การประมาณการแบบ Multiple linear regression

multiple linear regression

จากภาพด้านบน หากเราทำการประมาณแบบ Simple linear regression นั่นคือมีตัวแปร x เพียงแค่ 1 ตัว (sqft_living ) ส่งผลต่อ ราคาบ้าน (price) อย่างไร ซึ่งรูปแบบสมการที่ใช้ในการประมาณการคือ  

แต่การประมาณการแบบ Multiple linear regression นั้นเป็นการประมาณการที่มีตัวแปร x มากกว่า 1 ตัว  ซึ่งหลักการคือ ต้องการหาความสัมพันธ์ของตัวแปร x ทั้งหมด ว่ามีความสัมพันธ์กับตัวแปร y หรือไม่ ซึ่งหากเปรียบเทียบกับความเป็นจริงแล้ว หากเราต้องการประมาณราคาบ้าน (price) เราคงไม่ได้ดูแค่พื้นที่บ้านอย่างเดียว เราคงดูด้วยว่าบ้านหลังนี้มีกี่ชั้น กี่ห้องนอน ห้องน้ำกี่ห้อง เป็นต้น ดังนั้นข้อมูลของเราก็จะมีหลายตัวแปร แต่ก่อนที่เราจะประมาณการ เราต้องมีการกำหนดตัวแปรด้วย เช่น ให้  = bedrooms เป็นต้น ซึ่งในที่นี้เรามีตัวแปร x ทั้งหมด 10 ตัวตามภาพด้านล่าง (ในภาษาทางคอมพิวเตอร์เราจะเรียกตัวแปร X ว่า Fearture ดังนั้นในที่นี้เรามีทั้งหมด 10 features)

เมื่อเรากำหนดตัวแปร x ให้ข้อมูลทั้งหมดแล้ว ต่อมาเราก็จะมาเขียนสมการ Multiple linear regression เพื่อให้เข้าใจง่ายขึ้น เราจะยังไม่เขียนตัว i ใส่ลงไปนะคะ เราเอาไปใส่ตอนคำนวณกับตัวเลขจริงทีเดียวเลย ซึ่งสมการของเราคือ 

multiple linear regression

จากสมการด้านบน ที่เรากำหนด ให้ = 1 นั่นเป็นเพราะว่าในการประมาณการค่า Yp หรือ ค่า  ได้มาจากการบวกกันของตัวแปรฝั่งขวาทั้งหมด รวมไปถึงตัว  ด้วย และในการคำนวณโดยใช้ matrix นั้น เป็นการนำแถวไปคูณกับหลัก ซึ่งหากเราไม่กำหนดค่า  ขึ้นมา จะทำให้ผลรวม Yp ไม่ถูกต้อง (อ่านเรื่อง matrix for machinelearning ได้ที่นี่) หรือเราจะจินตนาการว่า เป็น feature ที่เพิ่มเข้ามาก็ได้ โดยค่าข้างใน มีค่าเท่ากับ 1 ทั้งหมด

ต่อมา เราจะมาแสดงให้เพื่อนๆดูกันว่า การคำนวณโดยการนำ matrix เข้ามาช่วย หลักการคิดเป็นอย่างไรกันนะคะ 

multiple linear regression

จากรูป กำหนดให้และ  ,,…, = X ทีนี้หากเราต้องการให้ผลคูณออกมาได้ค่า Yp 1 ค่า เราไม่สามารถนำ matrix ทั้งสองมาคูณกันตรงๆได้ เพราะมันคูณกันไม่ได้ (ตามหลักการคูณ matrix แล้ว จำนวนคอลัมน์ตัวตั้งต้องเท่ากับจำนวนแถวตัวคูณ ถึงจะสามารถคูณกันได้ ) เราจำเป็นที่จะต้องนำ matrix มา transpose ก่อนแล้วค่อยนำไปคูณ จะได้

เมื่อนำ matrix ทั้งสองมาคูณกันจะเห็นได้ว่า คำตอบที่ได้จะออกมาในรูปของค่า Yp 1 ค่า ตามที่เราต้องการ ดังนั้นเราจึงสามารถเขียนสูตรสุดท้ายที่เราจะใช้ได้ว่า 

multiple linear regression

ต่อมา เมื่อเราได้สมการประมาณการ หรือ สมการที่เราคาดว่าข้อมูลของเรามีความสัมพันธ์กันแบบ Multiple linear regression นี้ คำถามต่อมาคือ  

แล้วสมการ multiple linear regression นี้แม่นยำกับชุดข้อมูลของเราหรือไม่ ?

การที่สมการใดๆก็ตาม จะประมาณการข้อมูลออกมาได้แม่นยำนั้น สมการนั้นๆจะต้องมีค่า error ต่ำที่สุด ซึ่งผลรวมของค่า error ทั้งหมด เราเรียกว่า Cost function 

2. สมการ Cost function

ต่อมาเราจะมาอธิบายเพิ่มเติมว่า สมการ cost function คืออะไร เริ่มจากภาพด้านล่างนี้เลยค่ะ

multiple linear regression

จากรูปกำหนดให้

Yp = price ที่ได้จากสมการประมาณการ 

Yจริง= price ที่แท้จริง

โดยหลักการการประมาณการข้อมูลที่แม่นยำนั้น เราต้องหาเส้นสมการลากผ่านค่า Yจริง หรือทับกับจุด Yจริง มากที่สุด หรืออีกความมายคือ ค่า Yp ต้องมีค่าใกล้เคียงกับค่า Yจริงมากที่สุดนั่นเอง 

 

จากรูปจะเห็นได้ว่า Yp ที่ได้จากสมการ multiple linear regression นั้นไม่ได้ลากผ่านค่า Yจริงทุกค่า ซึ่งระยะห่างระหว่างค่า Yp และค่า Yจริง นี้เราเรียกว่า error ซึ่งการประมาณการที่แม่นยำจะต้องมีค่า error น้อยที่สุด (เท่ากับ 0 ได้เลยยิ่งดี perfect!!!) 

ทีนี้การที่เราจะลด error ได้นั้นเราจำเป็นที่จะต้องรวมค่า error ทั้งหมดก่อน เราเรียกสมการผลรวมค่า error ว่า Cost function นั่งเอง สมการคือ

หรือเขียนได้อีกแบบคือ 

multiple linear regression

เมื่อเรารู้แล้วว่า สมการ cost function  คืออะไร ต่อไปเราจะทำการลดผลรวมของ error เพื่อให้ได้สมการ multiple linear regression ที่แม่นยำที่สุด ซึ่งการลด error นี้เราเรียกว่าการ Minimize cost function และ algorithm ที่ใช้ในการ minimize cost function คือ  Gradient descent  แต่ก่อนที่เราจะไปดูการทำงานของ Gradient descent เรามาดูก่อนว่าตอนนี้เราเรียนรู้อะไรไปแล้วบ้าง 

3. หาสมการประมารการที่แม่นยำด้วย Gradient descent algorithm

ต่อมาการที่เราจะ minimize cost function ได้นั้นเราจำเป็นที่จะต้องนำ Gradient descent เข้ามาช่วย เนื่องจากเราไม่สามารถแทน ค่า x ทีละตัวแล้วคำนวณมือเปล่าได้ เพราะในความเป็นจริงแล้วเราอาจจะมี features มากกว่า 10 และแต่ละ features อาจจะมี observation เป็นล้านๆ ซึ่งเราจะเสียเวลาคำนวณมาก นี่จึงเป็นที่มาว่าทำไมเรานำ Gradient descent algorithm เข้ามาใช้  

ซึ่งสมการ Gardient descent คือ  multiple linear regression

ต่อมาเราจะนำ Gradient descent มา apply กับ สมการ multiple linear regression 

3.1 Gradient Descent apply Multiple linear regression

จากรูปด้านบน จะเป็นขั้นตอนการ apply สมการ multiple linear regression เข้ากับสมการ Gradient descent โดยเริ่มจาก

  1. เราตั้งสมมติฐานว่า ข้อมูลของเรามีความสัมพันธ์แบบ multiple linear regression จากนั้นเราก็เขียนสมการmultiple linear regression จากนั้นเราก็นำไปใส่ในสมการ cost function เป็นสมการผลรวมค่า error นั่นคือ
  2. ต่อมาเมื่อเราได้สมการ cost function มาแล้ว เราต้องการที่จะลดค่า error ลงให้ใกล้ 0 มากที่สุด หรือที่เรียกว่า การ minimize cost function เพื่อให้ได้สมการ multiple linear regression ที่แม่นยำที่สุด
  3. การที่จะ minimize cost function ได้นั้น เราจะเอาสมการ gradient deacent เข้าไปครอบสมการ cost function อีกที จนสุดท้ายเราจะได้สมการ Gradient descent ดังรูปด้านล่าง  

นิยายมเพิ่มเติม :

จุด Global minimum คือจุดที่ cost function มีค่าต่ำสุด ซึ่งจุดนี้จะได้ค่า coefficient ที่ดีสุด หรือจุดที่ทำให้ สมการ multiple linear regression ที่แม่นยำที่สุดนั่นเอง

ทีนี้เมื่อเราได้สมการ gradient descent มาแล้ว เราจะมาหาจุด global minimum ที่จุดนี้กัน ซึ่งการหาจุดต่ำสุดนี้สามารถทำได้ 2 วิธี คือ 

  • Gradient descent appoarch
  • Gradient descent = 0 

3.3 Gradient descent approach

การทำ gradient descent appoarch เป็นการที่เรามีการที่เราค่อยๆ diff สมการ cost function ออกมาจะได้ค่า ใหม่ 1 ค่า จากนั้นนำไปลบออกจากค่า เก่า และก็ diff แบบนี้วนไปเรื่อยๆ จนกว่าค่า magnitude จะมีค่าน้อยกว่าค่า tolerance ณ จุดที่ magnitude มีค่าน้อยกว่าค่า tolerance เราเรียกจุดนี้ว่า จุด global minimum หรือจุดที่ให้ค่า ที่แม่นยำที่สุดนั่งเอง (ในขั้นตอนการคำนวณ จะมีการกำหนดค่า tolerance ที่ประมาณ 0.01 หรือค่าที่เราต้องการที่มีค่าเข้าใกล้ 0 ส่วน magnitude เป็นค่าที่จะได้จากการคำนวณ สามารถเข้าไปดูขั้นตอนการกำหนดค่าต่างๆได้ที่นี่ 

ต่อมาเราจะมาคำนวณหาสูตร Gradient descent approach ซึ่งมีขั้นตอนดังนี้

  1. ทำการ diff สมการ cost function เทียบกับ 

หากเราต้องการหาค่า ใดๆ ก็สามารถแทนค่าได้เลย เช่น  

multiple linear regression

ในที่นี้ เรามี 10 features (แต่มี จุดตัดแกนอีก 1 รมมี 11 features) เราก็อาจจะต้องแทนค่า j ตั้งแต่ 0 -10 แบบ simultaneous (คือการแทนค่า j ตั้งแต่ 0 -10 แบบพร้อมๆกัน และทำการ diff ทั้ง 11 สมการไปพร้อมกัน )   

ซึ่งต้องบอกตามตรงว่าการเขียนสูตร Gradient descent approach นั่นมีความยุ่งยากมากกว่าวิธี Gradient descent = 0 มาก ทุกคนคงคิดว่ายากๆ ให้ผลดีกว่า แต่ก็ไม่เสมอไป เมื่อครั้งก่อนที่เราทดลองเปรียบเทียบการทำ gradient descent approach และ gradient descent = 0 ของสมการ simple linear regression ผลประกาฏว่า ให้ค่า ที่ใกล้เคียงกันมากๆ (สามารถเข้าไปดูขั้นตอนการคำนวณ gradient descent approach กับข้อมูลจริง และการเปรียบเทียบได้ที่นี่)

ดังนั้นราจึงอยากให้เพื่อนใช้วิธี Gradient descent = 0 มากกว่า นั่นคือการที่เราหาค่า ณ จุดที่ค่า cost function มีค่าต่ำที่สุดได้เลย ไม่ต้องค่อยๆ diff ให้ค่ามันลดลงเรื่อยๆ กว่าจะถึงจุด global minimum เราวาฟไปที่จุด global minimum เลยดีกว่า อิอิ

3.3 Gradient descent = 0

เป็นการหาค่า  ณ จุด global minimum โดยวิธีการคือ เราจะนำสมการ Gradeint descent มา เท่ากับ 0 และ แก้สมการหาค่า  ขั้นตอนเป็นดังนี้

  1. เริ่มจากการเขียนสมการใหม่ให้อยู่ในรูป matrix จะได้

multiple linear regression

ต่อมาเราจะใช้การ diff matrix หมายความว่า เราไม่ต้อง diff ตัวแปรทีละตัวและนำไปลบกับค่า y(i) แบบการทำ gradient descent approach เราจะจับตัวแปร x(i) และค่า y(i) ทั้งหมด มาใส่อยู่ในรูปของ matrix เพื่อให้ง่ายต่อการคำนวณดังรูป

multiple linear regression

เมื่อเรามองข้อมูลของเราเป็นภาพใหญ่ๆเป็น X และ Y แล้ว ดังนั้นในสมการของเราก็ไม่จำเป็นที่จะต้องใส่ตัว sigma แล้ว

และเนื่องจากว่ามันเป็นการ diff matrix ซึ่งมันมีความยุ่งยากมาก เพื่อความเข้าใจง่ายๆ เราอยากให้เพื่อนๆเอาสัญญาลักณ์ T (Transpose) ออกก่อน และมองตัวแปร X, Y ของเราเป็น scalar และทำการ diff scalar ปกติ จะได้ 

ทีนี้ เมื่อเราทำการ diff scalar เรียบร้อยแล้ว เราก็จะนำ T เข้ามาใส่ แล้วถามว่าใส่จะได้

เพื่อนๆคงสงสัยว่าทำไมต้อง เอา T มาใส่ตรงนี้ ต้องเข้าในก่อนนะคะว่า  x  และ คือตัวแปรเดียวกันข้อมูลข้างในคือ feature เดียวกัน เราแค่นำ X มา transpose ตามหลัก matrix เฉยๆ เพื่อที่เวลาที่เราทำ gradient descent = 0 และ จะสามารถคูณกับ Y ได้ (เดี๋ยวเราจะอธิบายที่มาอย่างละเอียดอีกทีในท้ายบทนะคะ เพื่อไม่ให้เป็นการสับสนมากเกินไป)

ต่อมา เมื่อเราได้สมการที่ผ่านการ diff มาแล้ว จะได้

จากนั้นเราก็จะทำการ Set gradient descent = 0 เพื่อที่จะหาค่า   ณ จุดที่ cost function มีค่าเท่ากับ 0 (นี่เป็นที่มาที่เรา set gradient descent =0) ขั้นตอนการแก้สมการเป็นดังนี้

1. นำ gradient descent ไป set = 0 และแตกสมการจะได้

2. ต่อมานำ 1/2 คูณเข้าทั้งสองข้าง จากนั้นย้ายข้างสมการ จะได้

multiple linear regression

3. กำจัด ได้โดยการใช้คุณสมบัติ Identity matrix โดยการนำ คูณเข้าทั้งสองข้าง จะได้

multiple linear regression

สรุป

เราสามารถหาค่า  ที่ทำให้สมการ multiple linear regression แม่นยำที่สุดได้จาก 2 สูตร คือ

Gradient descent approach :

Gradient descent = 0 :

อธิบายเพิ่มเติมเกี่ยวกับที่มาของสูตร

ต่อมาจะเป็นการธิบายเพิ่มเติมเกี่ยวกับที่มาของสูตร ว่าทำไมต้องมีการนำ matrix X มา transpose ก่อนที่จะนำไปคูณกับ Y ลองดูภาพด้านล่างนี้ก่อนนะคะ

multiple linear regression

จากรูป ชุดข้อมูล Training set ของเรา เมื่อนำมาเขียนให้อยู่ในรูป matrix จะได้ดังรูปด้านบน ซึ่งการที่ matrix X และ matrix Y จะคูณกันได้ มีกฏอยู่ว่า

คอลัมน์ของ X = แถวของ Y

11 ไม่เท่ากับ 1

ดังนั้น หากต้องการให้ x คูณกับ Y ได้ จำเป็นที่ต้องนำ x มา transpose ก่อน จะได้ว่า 

= 11*5

ดังนั้น ตามกฏการคูณ matrix 

คอลัมน์ของ  = แถวของ Y

      5 = 5

เมื่อ คอลัมน์ของ = แถวของ Y แล้ว ทั้งสอง matrix ก็สามารถคูณกันได้ 

ทั้งหมดที่กล่าวมานี้ เป็นเพียงทฤษฎีการประมาณการข้อมูลแบบ multiple linear regression ซึ่งเป็นการประมาณการพื้นฐานที่ใช้กันทั่วไป เราจะสอนการเขียน code ด้วยภาษา python ซึ่งเครื่องมือที่ใช้คือ jupyter notebook และเรายังจะมีการสอนเพื่อนๆตีความข้อมูลที่ได้ โดยใช้หลักสถิติเข้ามาอธิบายด้วย สามารถเข้าไปดาวน์โหลดการเขียน code ได้ที่นี่