Linear regression model with Python

บทความที่แล้ว เราได้พูดถึงการทำนายข้อมูลด้วย Regression model และ ได้เห็นตัวอย่างจากการทำนายค่าราคาหุ้นของโมเดลนี้กันแล้ว

Simple linear regression กับการทำนาย

ทดลอง Regression ทำนายราคาหุ้น ADVANC, TMB และ CPALL

ในบทความนี้เราจะมาดูตัวอย่างการเขียนโปรแกรมสร้างโมเดลตัวนี้อย่างง่าย ด้วย Python กันค่ะ มาเริ่มต้นกันที่ Simple linear regression ข้อมูลที่เราจะทำมาใช้ในการนำเสนอ จะเป็นข้อมูลตัวเดียวกับที่เราเคยใช้ในบทความ Simple linear regression กับการทำนาย  ซึ่งเป็นข้อมูล จำนวนปีประสบการณ์ทำงาน และ เงินเดือนที่ได้ จำนวน 30 แถวข้อมูล

ขั้นตอนการสร้างและใช้งาน regressor model

1) import libraries  ที่จะเป็นต้องใช้งาน

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import metrics

libraries พื้นฐานที่ต้อง import มีดังนี้

  • numpy – ใช้ในการประมวลผลตัวเลข
  • pasdas – ใช้ในการจัดการกับข้อมูล
  • matplotlib – ใช้ในการจัดการแสดงผลกราฟที่สำคัญตัวหลักตัวหนึ่งของ Python
  • sklearn – ใช้ในการเรียนรู้ของ Machine Learning

2) อ่านข้อมูลที่ต้องการใช้ในการทำนาย

dataset = pd.read_csv(‘data.csv’)
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

ในที่ได้เราอ่านข้อมูลซึ่งเป็น ไฟล์ .csv เข้ามาเก็บไว้ที่ ตัวแปร dataset ต่อมาแยกข้อมูลออกเป็นสองส่วนคือ ส่วนของ dependant (y) และ independent variables (X) screen-shot-2017-01-19-at-22-54-46

ถ้าเราจะเทียบกับฟังชันก์พื้นฐานของ linear regression ด้านบน ก็จะเห็นว่า y คือ ตัวแปรที่เราต้องการทำนาย (ในที่นี้คือ เงินเดือน) ซึ่งจะเรียกว่า dependent variable ส่วน x1 คือ ตัวแปรที่จะเอามาใช้ในการทำนายข้อมูล y เรียกกันว่า independent variable (ในที่นี้คือ ประสบการณ์ในการทำงาน) … ง่ายๆ คือ เราจะเอาจำนวนปี มาใช้ในการทำนายเงินเดือนที่ควรจะได้นั้นเอง สำหรับ b1 และ  b0 คือ ค่า coefficient และ  constant ที่ได้จากการคำนวณด้วยคำสั่ง regressor.fit() ในภายหลัง

 3) แบ่งข้อมูล Train และ Test

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3.0, random_state = 0)

เราแบ่งข้อมูลออกเป็น 2 ชุด คือ  1)  ชุดของข้อมูลสอน training set (ประกอบด้วย X_train และ y_train) 2)  ชุดของข้อมูลทดสอบ testing set (ประกอบด้วย X_test และ  y_test)

4) ทำการเรียกใช้ และ สร้างตัวทำนาย

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

import ไลบารี่ linearRegression เพื่อใช้ในการสร้างทำนาย  (regressor) จากนั้นทำการคำนวณเพื่อหาเส้นตรงที่สามารถ fit พอดีกับข้อมูลสอนได้ดีที่สุด ถ้าลองพล็อตกราฟเพื่อดูเส้นที่ได้ จะได้ผลลัพธ์ดังนี้

plt.scatter(X_train, y_train, color = ‘red’)
plt.plot(X_train, regressor.predict(X_train), color = ‘blue’)
plt.title(‘Salary vs Experience (Training set)’)
plt.xlabel(‘Years of Experience’)
plt.ylabel(‘Salary’)
plt.show()

screen-shot-2017-01-26-at-14-10-26

ณ จุดนี้ เราจะได้ฟังก์ชันของเส้นตรงที่สามารถ fit ข้อมูลได้ดีที่สุดมาแล้ว และ ตัวทำนาย หรือ regressor ของเราได้ถูกสร้างขึ้นโดยสมบูรณ์แล้ว (ด้วยข้อมูลชุดสอน training set) ต่อไปนี้โมเดลของเราก็จะพร้อมสำหรับการทำนายข้อมูลที่เราต้องการ

5) ทดลองทำนายข้อมูล

ทดลองทำนายข้อมูลด้วยข้อมูลชุด test set ที่เราได้แบ่งไว้ในขั้นตอนที่ 3 (ข้อมูลส่วนนี้จะไม่ได้ถูกใช้ในส่วนของการสร้างโมเดลนะคะ พูดง่ายๆ ก็คือ เป็นข้อมูล unseen สำหรับตัวทำนายนั่นเองค่ะ) คำสั่งที่ใช้ในการสั่งให้โมเดลทำนาย ทำการทำนายข้อูล คือ

y_pred = regressor.predict(X_test)

ผลที่ได้จากการทำนายจากโมเดลของ เป็นดังนี้

screen-shot-2017-01-26-at-14-51-00

จากรูป X_test คือ ข้อมูลประสบการณ์ทำงาน (ปี) ที่ต้องการการนำมาทำนายหาค่าเงินเดือน ส่วน y_pred เป็นค่าที่โมเดล linear regressor ทำนายออกมาให้ว่าควรจะได้เงินเดือนเท่าไหร่จากประสบการณ์ที่มี สุดท้าย เราจะนำผลของเงินเดือนจริงๆ ที่ควรได้คือ actual_y มาเปรียบเทียบดูนะคะ ว่าผลที่ทำนายได้คลาดเคลื่อนไปจากผลจริงๆ มากน้อยแค่ไหน

จะเห็นได้ว่า มีบางครั้งที่โมเดล linear regress ทำนายผลได้ค่อนข้างใกล้เคียงกับความเป็นจริงๆ (แถวที่ 2, 5-6  และ 10) และ ก็มีหลายครั้งที่ผลที่ทำนายได้ค่อนข้างแตกต่างกับค่าจริง โดยค่า Mean absolute error อยู่ที่ประมาณ 52% ซึ่งนับว่าสูงมาก ดังนั้น ถ้าจะให้สรุป ก็คงจะขอสรุปผลว่า การใช้จำนวนประสบการณ์ในการทำงานเพียงตัวเดียว มาทำนายค่าเงินเดือนนั้น ดูแล้วอาจจะ ไม่เพียงพอ ดังนั้นในครั้งต่อไป เราจะมาลองเพิ่มข้อมูลที่เกี่ยวข้องในการทำนายเข้าไป และ ทำการปรับปรุงตัว regressor ของเราเป็น multiple linear regressor เพื่อประสิทธิภาพการทำนายที่ดีขึ้นกันค่ะ

ขอจบบทความนี้ไว้ด้วย กราฟสรุปขั้นตอนกานทำงานทั้งหมด ดังนี้ …

screen-shot-2017-01-26-at-15-30-34

 

13062103_233130583716199_6224283738921716075_n
Enjoy Machine Learning!
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s