lab by jupyter notebook

by ilog.ai

Linear regression in Jupyter notebook 2

ในบทความนี้ ใช้ Jupyter Notebook เหมือนเดิมในการที่จะทำการประมาณการ Linear regression แต่กระบวนการในการประมาณการนั้น เราจะนำข้อมูลจริงมาใช้และมีการแบ่งข้อมูลออกเป็น 2 กลุ่มหลัก คือ Training set และ Testing set จากนั้นเราจะทำการประมาณการข้อมูล Training set และนำสมการที่ได้ไปประมาณการข้อมูล Testing set แล้วดูว่าสมการที่ได้นั้นเหมาะสม แม่นยำ กับข้อมูลหรือไม่ โดยการประมาณการนี้เราจะใช้ Library Scikit-learn ซึ่งเป็น library ที่นิยมมากในวงการ Data Science 

อัพเดทเรื่อง Machine Learning ได้ก่อนใครที่นี้ !!

Lab 3 : Linear regression with Scikit-learn (split data)

1. เริ่มจากการ import library ที่จำเป็นในการทำการประมาณการแบบ linear regression ในที่นี้เราใช้

  • Pandas – เพื่อช่วยในการเรียกอ่านไฟล์ข้อมูลและจัดการข้อมูล 
  • Seaborn – ในการพล็อตกราฟสมการประมาณการ
  • Scikit-learn (sklearn) – ใช้ในการแบ่งข้อมูลออกเป็น Training set และ Testing set และยังใช้ในการทำการประมาณการ Linear regression
  • Matplotlib – ใช้ในการพล็อตกราฟ (ดูการกระจายตัวของข้อมูล) 

2. เรียกไฟล์ข้อมูลที่ต้องการทำการประมาณการ ในที่นี้ใช้ไฟล์แบบ .csv ซึ่งสามารถ Download ได้จาก Link นี้ และตั้งชื่อ dataframe ว่า df 

  • df.head () คือ คำสั่งที่เราต้องการให้มันแสดงข้อมูลเพียงแค่ 5 แถวแรกและคอมลัมน์ทั้งหมด 
  • df.shape คือคำสั่งที่เราต้องการให้มันแสดง แถวและคอลัมของข้อมูลว่าทั้งหมดมีเท่าไร ซึ่งข้อมูลที่เราจะประมาณการมีทั้งหมด 4,222 แถว และ 21 คอลัมน์ 

3. เราต้องการประมาณการ โดยดูเพียงแค่ตัวแปร x หนึ่งตัวนั่นคือ x = sqft_living ส่งผลต่อ y = price อย่างไร ดังนั้นเราจะใช้คำสั่ง drop() ในการลบคอมลัมน์ที่เราไม่ต้องการออก และมีการกำหนด axis = 1 หมายถึงคอมลัมน์ (ถ้า axis = 0 หมายถึงให้ลบแถว ) สุดท้ายเราจะได้ข้อมูลที่มี 4,222 แถว และ 2 คอลัม (ไม่รวมคอลัมที่เป็น index) และเราตั้งชื่อให้กับข้อมูลชุดใหม่นี้ว่า df2

4. จากนั้นเราก็ใช้คำสั่ง df2.plot.scatter() ในการพล็อตกราฟดูการกระจายตัวของข้อมูล กำหนด x = sqft_living , y= price และชื่อกราฟคือ price per Sqft_living 

5. จากนั้นเราก็แบ่งข้อมูลที่มีออกเป็น Training set และ Teasting set แต่ก่อนที่เราจำทำการแบ่งข้อมูล เราจำเป็นที่จะต้องกำหนดตัวแปรก่อน โดย

  •  X = sqft_living
  •  y = price 

จากนั้นเราจะแบ่งข้อมูลออกเป็น 4 กลุ่ม นั่นคือ X_train , X_test,y_train และ y_test ซึ่งเราจะแบ่งข้อมูล Training set = 70% และ Testing set = 30%

6. เราก็จะได้ข้อมูล 2 กลุ่มใหญ่ ( 4 กลุ่มย่อย) นั่นคือ

Training set : 

  • X_train = 2,995
  • y_train = 2,995 

Testing set :

  • X_test = 1,267
  • y_test  = 1,267

7. เมื่อเราแบ่งข้อมูลเรียบร้อยแล้ว เราก็จะทำการประมาณการข้อมูลแบบ Linear regression เราก็จะต้องเรียกใช้งานฟังก์ชั่น LinearRegression จาก library Scikit-learn

ต่อมาก็ทำการตั้งชื่อสมการที่เราต้องการประมาณการว่า model ถ้าหากว่าเรายังไม่ได้ใส่ค่าอะไรลงไปในสมการ LinearRegression() ค่าที่แสดงออกมาจะเป็น defult จากนั้นเราก็ทำการประมาณการด้วยคำสั่ง model.fit(X_train,y_train)

8. เมื่อประมาณการเรียบร้อยแล้ว เราก็มาดูผลการประมาณการกัน จะได้

  • Intercept (theta_0)  = 25,757.29
  • Coefficient (theta_1)  = 245.80
  • เพื่อให้ดูง่ายขึ้น เราจะทำให้อยู่ในรูปของ dataframe โดยการเชื่อมค่าของ X_train และ y_train เข้าด้วยกันด้วยคำสั่ง concat() และมีการกำหนด (axis=’column’)ให้เชื่อมกันในแนวตั้ง(คอมลัมน์) ก็จะได้ตารางออกมา 

9. จากนั้นเราจะมาพล็อตกราฟดูการประมาณข้อมูลที่ได้ โดยใช้ library Seaborn (กำหนด x = sqft_living, y = price ,ข้อมูล(data)ที่ใช้มาจาก train, Confident interval (ci) = None, กำหนดขนาดรูป = 4 )

10. จากนั้นเราจะเอาสมการที่ได้ มาประมาณการข้อมูลที่เหลือ (Testing set) โดย y_hat_test คือ ราคาที่เราประมาณออกมาได้จากข้อมูล Testing set โดยเราใช้สมการเดิมนั่นคือ model.predict และใส่ข้อมูล X_test แทน (ราคาที่ออกมาจะอยู่ในรูป array)

จากนั้นเราต้องการที่จะดูเปรียบเทียบระหว่าง sqft_living และ price ของข้อมูล Testing set เราก็ใช้คำสั่ง concat เหมือนเดิม และตั้งชื่อตารางว่า test

11. หากเราต้องการที่จะดูเปรียบเทียบราคาจริง(price) และ ราคาที่ประมาณการได้ (predicted) ของข้อมูล Testing set ว่ามันใกล้เคียงกันหรือไม่ เราสามารถใช้คำสั่ง concat ()ได้

12.สุดท้ายคือ การดูค่า Correlation ซึ่งในที่นี้มีค่าอยู่ที่ 0.711933 หมายความว่า ตัวแปร X มีความสัมพันธ์กับตัวแปร y มาก ในทางบวก ที่ระดับ 0.711933 (ขนาดพื้นที่ living room เพิ่มขึ้น ราคาบ้านเพิ่มขึ้น มันไม่ได้หมายถึง x เพิ่มขึ้น 1 หน่วย แล้ว y เพิ่มขึ้น 0.711933 อย่าสับสนกับค่า coeffient นะคะ)

การทำ Simple linear regression นี้เป็นแค่ส่วนหนึ่งของ Regression ยังมี Regression แบบอื่นอีก ไม่ว่าจะเป็น Multi linear regression , Non-linear regression , Logistic regression เป็นต้น ทั้งนี้การที่เราจะประมาณการข้อมูลอะไรเราจำเป็นที่จะต้องเลือกวิธีการประมาณการให้เหมาะสมกับข้อมูล เพื่อที่จะได้ผลลัพธ์ที่แม่นยำที่สุด ซึ่งเราคงจะได้เรียนรู้กันในบทต่อไป 

อัพเดทเรื่อง Machine Learning ได้ก่อนใครที่นี้ !!