Long(ลอง) Code กับ Linear Regression

หมายเหตุ ผู้อ่านสามารถดู table of contents ของบทความ machine learning ได้ที่ https://goo.gl/BExvUQ

ก่อนจะเข้าเนื้อหาผมขออนุญาติทำความเข้าใจกับสัญลักษณ์ที่ผมใช้ในบทความของผมก่อนนะครับ เนื่องจากบังเอิญได้รับ feedback ว่าสัญลักษณ์อาจจะทำให้เกิดความสับสนกับผู้อ่านได้

สัญลักษณ์ที่ใช้

จากรูปด้านบนจะเห็นว่าได้ bar symbol และ hat symbol ถึงแม้ผมไม่ได้ใส่ไว้บนตัวอักษรอย่างที่มันควรจะเป็นแต่อยากให้เข้าใจตรงกันว่ามันคือตัวเดียวกันนะครับ ซึ่งเหตุผลที่ผมพิมพ์ไปแบบนั้นก็เพราะผมยังหาวิธีใส่ symbol บนตัวอักษรไม่ได้เลยครับ T_T ท่านใดทราบวิธีการทำดังกล่าวใน medium รบกวนชี้แนะผมด้วยนะครับ

กลับมาสู่เนื้อหาในบทความนี้ของเรากันะครับ ซึ่งเราจะมาทำการลองสร้าง ML โดยใช้สูตร linear regression กัน โดย dataset ที่เราจะใช้ในครั้งนี้เป็นการจำลองเหตุการณ์ว่าเราได้รับหน้าที่ในการทำนายราคาบ้านจากข้อมูลที่เราได้รับมา ซึ่ง dataset ที่ผมนำมาใช้นี้เป็นส่วนนึงของ example ใน course ของ udemy สอนโดย Jose Portilla ในสนใจศึกษาด้วยตัวเองลองเข้าไปดูกันได้ https://www.udemy.com/python-for-data-science-and-machine-learning-bootcamp (ของเค้าดีจริงขอบอก)

5 rows จาก dataset

จากรูปจะเห็นว่า dataset ของเราประกอบไปด้วย 7 columns แต่มี 6 features ทำไมถึงมีแค่ 6 นั้นก็เพราะเราจะทำการตัด column price ออกเพราะนั้นคือค่า Y ในสูตรของ linear regression (https://goo.gl/j9FcaJ)ที่เราจะต้องทำการทำนาย ในบทความต่อๆไปเราจะใช้คำว่า features แทน columns ที่จะถูกเลือกมาใส่เป็น input ของระบบกันนะครับ ขั้นตอนต่อไปคือการเลือก features ที่จะมาใส่แทนค่า X ในสูตรของ linear regression คำถามคือแล้วจะเลือก features ยังไง เริ่มต้นให้ทำการตัด feature ที่ไม่ใช่ตัวเลขออกไปก่อน โดยอาจจะเลือกลบออกจาก dataset เลยหรือถ้าเราคิดว่า feature นั้นน่าจะมีความสำคัญในการทำนาย price เราจำเป็นจะต้องแปลงจากตัวอักษรให้เป็นตัวเลขเสียก่อน ในบทความนี้เราจะเลือกตัด feature ทิ้งออกไปก่อนนั้นคือเราจะทำการ delete feature address ออกจาก dataset ขั้นตอนต่อมาคือการ plot กราฟดูข้อแบบของข้อมูลว่ามีเทรนไปในทาง linear หรือไม่ถ้าเทียบกับแกน Y ซึ่งในที่นี้คือ price โดยกราฟที่เราเลือกใช้สำหรับ linear pattern คือ scatter plot

scatter plot ของทั้ง 6 features เทียบ price

จากรูปจะเห็นได้ว่าจาก 5 features มีเพียง 4 features เท่านั้นที่แสดงออกมาใกล้เคียงกับ linear pattern เขียนแทนโดยเส้นสีแดง ซึ่งขั้นตอนต่อไปเราจะนำทั้ง 4 featuresมาเข้าสูตรของ linear regression เพื่อทำนายค่า Y กัน …แต่เดียวก่อน! ค่า X ในบทความที่แล้วมันมีแค่ 1 ตัวเท่านั้นในสูตรจะใส่ทั้ง 4 ตัวเข้าไปยังไงละที่นี้ซึ่งจริงๆแล้วในชีวิตจริงเราจะเจอว่า feature ที่น่าจะเลือกใช้อาจจะมีเป็นร้อย features ก็เป็นไปได้ ทีนี้เรามาดูสูตรคำนวน linear regression ที่มี feature มากกว่า 1 กันนะครับ

สูตร linear regression ที่มี feature มากกว่า 1

จากสูตรเราจะเห็นได้ว่า เมื่อมี feature มากกว่า 1 เราจะทำการประกบ slope coefficient (B0 — Bp) เข้ากับค่า feature แต่ละตัวในที่นี้แทนด้วย X1 — Xp จากนั้นทำการบวกผลลัพธ์ของการคูณของแต่ละ feature เข้าด้วยกัน แต่ในบทความนี้น่าจะไม่ทำการคำนวนหาค่า coefficient ด้วยมือกันแต่จะใช้ computer คำนวนแทน เรามาเริ่ม code กันเลย!

แยก predictors และ response ออกจาก dataset

ขั้นแรกเราต้องทำการแยก predictors(features) และค่า response(output) ออกจาก dataset โดย features ทั้งหมดเราจะให้อยู่ในตัวแปร X และค่า output จะให้อยู่ในตัวแปร Y

แยกข้อมูล train และข้อมูล test

จากนั้นเราจะทำการแยกข้อมูลออกเป็น 2 กลุ่มนั้นคือข้อมูลสำหรับ train และข้อมูลสำหรับ test ซึ่งเหตุผลที่เราจำเป็นต้องแยกเพื่อที่ว่าเราจะได้ทำการประเมินว่า ML ของเราเป็น generalization model มากพอในการใช้งานจริงหรือไม่ โดยถ้า ML model ที่เราสร้างออกเป็นมีความเป็น generalization model นั้นคือไม่ว่าเจอข้อมูลต่างๆในอนาคตที่ computer ไม่เคยเห็นมาก่อน มันก็ยังคงสามารถทำนายผลได้อย่างแม่นยำเช่นเดิมเหมือนกับที่เคยแม่นยำของ train ใน lab โดยในขั้นตอนการ train computer เราจะให้ computer เรียนรู้จากข้อมูล X_train และผลลัพธ์ Y_train แต่ในขั้นตอนการ test เราจะใส่แค่ข้อมูล X_test แล้วนำผลลัพธ์ที่ computer ทำนายมาเทียบกับ Y_test ซึ่งเป็นเฉลยของการทดสอบนี้

สร้าง object สำหรับ linear regression

ต่อมาเราจะทำการสร้าง ML object ที่จะถูกใช้สำหรับ train และใช้งานในอนาคตโดย ML object ที่เราเลือกสร้างคือ LinearRegression ซึ่งเป็นส่วนหนึ่งของ scikit-learn tool โดยขั้นตอนการ train เราจะใส่ข้อมูลสำหรับ train เข้าเป็น parameterใน method fit

ค่า coefficient ที่ computer คำนวนได้

ผลลัพธ์นึงที่ได้หลังจากการที่ computer ได้ทำการเรียนรู้ข้อมูลที่เราได้ทำการใส่เข้าไปในขั้นตอนการ train นั้นก็คือค่า coefficient หรือค่า B1 — Bp ของแต่ละ feature โดยเมื่อได้ค่าดังกล่าวแล้วใส่ในสูตรของ LinearRegression ก็จะสามารถทำนายข้อมูลด้วยมือได้ (แต่ใช้ computer ทำงานแทนเราดีกว่าครับ)

ทำนาย price จากข้อมูล test

เมื่อเราทำการสอน computer ของเราด้วยข้อมูล train แล้ว ขั้นตอนต่อไปเราก็จะทำคือ ทดสอบ computer ของเราโดยการใส่ข้อมูล test ซึ่งข้อมูลชุดนี้ computer ยังไม่เคยเห็นมาก่อน และดูว่า computer สามารถทำนายผลลัพธ์ได้ตรงกับเฉลยหรือไม่

เทียบ Y perdict กับ Y test

จากรูปข้างต้นเป็นการเทียบ output ที่ computer ทำนายกับ output จริงๆที่เป็นค่าเฉลยของการทดสอบ จะเห็นว่าค่าตัวเลขเมื่อนำมา plot จะไปในทิศทางเดียวกัน ซึ่ง ณ ตอนนี้ถือว่าผลลัพธ์ที่ได้นั้นเป็นไปตามที่เราต้องการคือให้กราฟออกมาใน linear pattern

สุดท้ายนี้ถ้าท่านใดมีข้อสงสัยหรือคำชี้แนะใดๆสามารถฝากข้อความได้ที่ https://www.facebook.com/coeffest/ นะครับ ขอบคุณมากครับที่ติดตาม