ถ้าเราจะต้องทำนายค่าจำนวนจริง เช่น ราคาหุ้นวันพรุ่งนี้ ยอดขายของปีหน้า หรือจำนวนสินค้าที่เราจะขายได้ในอนาคต หนึ่งในวิธีที่ง่ายและเหมาะสมที่ใช้สำหรับการทำนายข้อมูลแบบนี้ คือ การใช้ Linear Regression
บทความนี้ เราจะมาดู Linear Regression ใน Python กัน เราจะใช้ Google Colab ในการรันโค้ด โดย dataset ที่เราจะใช้เป็นตัวอย่างคือ mtcars ซึ่งเป็นข้อมูลรถ ได้มาจาก 1974 Motor Trend US magazine
ข้อมูลประกอบไปด้วย 32 แถว นั้นคือมีรถทั้งหมด 32 ประเภท (เป็นรถระหว่างปี 1973 - 1974)
ข้อมูลประกอบด้วย 11 columns ดังนี้
[, 1] mpg Miles/(US) gallon
[, 2] cyl Number of cylinders
[, 3] disp Displacement (cu.in.)
[, 4] hp Gross horsepower
[, 5] drat Rear axle ratio
[, 6] wt Weight (1000 lbs)
[, 7] qsec 1/4 mile time
[, 8] vs Engine (0 = V-shaped, 1 = straight)
[, 9] am Transmission (0 = automatic, 1 = manual)
[,10] gear Number of forward gears
ขั้นตอนที่ 1 นำเข้าข้อมูล mtcars
ตัวอย่างของข้อมูลสามารถ copy code และโหลดได้ตามนี้เลย
import pandas as pd
url = "https://raw.githubusercontent.com/ketnas/homework/main/AI/mtcars.csv"
mtcars = pd.read_csv(url, index_col=0)
mtcars.head()
ขั้นตอนที่ 2 จัดการข้อมูลให้เหมาะสม และทำการวิเคราะห์ข้อมูลเบื้องต้น
ในตัวอย่างนี้เราจะหา Correlation และทำการวาดกราฟเพื่อดูความสัมพันธ์ระหว่าง weight และ mpg
อย่างแรก เราจะทำการหา Correlation Matrix ของข้อมูลทั้งหมดก่อน
mtcars.corr()
ผลที่ได้
ทดลอง plot graph ดูความสัมพันธ์ระหว่าง weight และ mpg โดยใช้ matplotlib library
import matplotlib.pyplot as plt
plt.scatter(mtcars.wt,mtcars.mpg)
plt.xlabel("weight")
plt.ylabel("mpg")
print(mtcars.wt.corr(mtcars.mpg))
รูปกราฟที่ได้และค่า correlation
ต่อมา เราจะทำการแยกค่า Independent variable (X) และ Dependent variable (y)
y = mtcars['mpg']
X = mtcars[['wt']]
กำหนดให้ y เป็นค่าของ mpg และ X เป็นค่าของ wt (weight)
ขั้นตอนที่ 3 ทำการสร้าง Simple linear regression model
เราจะใช้ sklearn library ใน Python สำหรับการสร้าง model
# wt vs mpg
from sklearn import linear_model as lm
model = lm.LinearRegression()
results = model.fit(X,y)
print(model.intercept_, model.coef_)
ผลที่ได้จะเป็นค่า Intercept และ Coefficient ของ regression model
จะได้ว่า ค่า Intercept = 37.285 และค่า Coefficient หน้าตัวแปร wt = -5.344
ขั้นตอนที่ 4 ประเมิณประสิทธิภาพของ regression model ที่เราสร้างมา
ทำการคำนวณค่า Error
y_pred = model.predict(X)
y_error = y - y_pred
ลองสร้างกราฟระหว่าง wt และ mpg พร้อมทั้งแสดง trend line ที่มีสีแดงด้วย
plt.scatter(X,y)
plt.xlabel("weight")
plt.ylabel("mpg")
plt.plot(X,y_pred,color='red')
จะได้ผลแบบนี้
ทำการหาค่า Root-mean square error (RMSE) จะได้ ค่า RMSE = 2.468
import math
import numpy as np
math.sqrt(np.mean(y_error**2))
ขั้นตอนที่ 5 ทดลองปรับปรุง regression model
ในขั้นตอนนี้ เราจะลองปรับ Intercept ของ regression model ให้เป็น 0 โดยทำการกำหนด fit_intercept = False
from sklearn import linear_model as lm
model_0 = lm.LinearRegression(fit_intercept=False)
results = model_0.fit(X,y)
print(model_0.intercept_, model_0.coef_)
จะได้ผลลัพธ์เป็น
ทำการ plot กราฟ
y_pred = model_0.predict(X)
y_error = y - y_pred
plt.scatter(X,y)
plt.xlabel("weight")
plt.ylabel("mpg")
plt.plot(X,y_pred,color='red')
รูปกราฟ
และหาค่า RMSE จะได้ ว่าค่า RMSE = 11.091
math.sqrt(np.mean(y_error**2))
สรุปผล
เราจะได้ว่า ถ้าต้องการสร้าง regression model เพื่อทำนาย mpg โดยใช้ weight เราจะได้สมการ regression model ที่ดีที่สุดคือ mpg = 37.285 - (5.344 * weight) เนื่องจากมีค่า RMSE ที่น้อยกว่าอีกสมการที่เรากำหนดให้ intercept = 0
เย้!! 🎉
Top comments (0)