iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
AI & Data

從機器學習到深度學習 - 30天搞懂常見演算法的基礎理論系列 第 4

【Day 4】使用線性迴歸預測加州房價 Predict the house price in CA using linear regression

  • 分享至 

  • xImage
  •  

今日大綱

  • 資料集
  • 衡量指標
  • 程式碼

資料集

今天我以sklearn所提供的資料集舉例,預測加州不同區的房價,獨立變數與依變數的敘述如下:

獨立變數

  • MedInc: 收入的中位數
  • HouseAge:屋齡的中位數
  • AveRooms:每戶平均房間數量
  • AveBedrms:每戶平均臥室數量
  • Population:人口數
  • AveOccup:每戶平均人口數
  • Latitude:緯度
  • Longitude:經度

依變數

  • MedHouseVal:加州行政區的房價中位數,以100,000為一單位

衡量指標

  1. 平均絕對誤差 (Mean absolute error, MAE)
    計算實際值與預測值之間的誤差之絕對值平均
    yi後面的變數稱為y head,代表預測值。
    https://ithelp.ithome.com.tw/upload/images/20220917/20145688HrItDwlZdm.png

  2. 均方誤差 (Mean square error, MSE)
    計算實際值與預測值之間的誤差之平方平均
    https://ithelp.ithome.com.tw/upload/images/20220917/201456885IO4x96bwT.png

  3. 均方根誤差 (Root mean square error, RMSE)
    計算實際值與預測值之間的誤差之平方平均,再開根號
    https://ithelp.ithome.com.tw/upload/images/20220917/20145688lnGezvv0iJ.png

  4. R平方 (R squared)
    R平方為衡量模型的指標,其介於0到1之間,代表x解釋y的變量的比例,越高代表模型的表現越好。如果R平方等於0.7,表示y(依變數)的70%變化能由x(獨立變數)解釋。
    https://ithelp.ithome.com.tw/upload/images/20220917/20145688skROQnkJoo.png

程式碼

首先,先匯入將會使用到的libraries,並且將房價資料儲存至data變數中。將data列印出,檢視data裡的資料

from sklearn.datasets import fetch_california_housing
import pandas as pd

data = fetch_california_housing()
print(data)

https://ithelp.ithome.com.tw/upload/images/20220917/20145688WykYpwEmvV.png
data所抓到的資料型態為字典(dictionary),target的value就是目標變數,data的value就是獨立變數,將他們儲存成y與x,並且觀察各個特徵的敘述性統計。Pandas的dataframe有個function為describe(),只要打dataframe.describe()就會列出所有連續變數的敘述性統計資料,包含數量、平均數、標準差、最大值、最小值等。

x = pd.DataFrame(data['data'])
#data的feature_names指定成x的column名稱
x.columns = data['feature_names']
y = pd.DataFrame(data['target'])
#data的target_names指定成u的column名稱
y.columns = data['target_names']
print(x.describe(),"\n", y.describe())

結果如下
https://ithelp.ithome.com.tw/upload/images/20220917/20145688aF5rxV4EZM.png

匯入train_test_split將原始資料切割成訓練集(train set)與測試集(test set),訓練集用來訓練模型,找出最適合描述訓練集資料裡的模型,而測試集用來檢視模型的泛化能力。有時候訓練過度會有過度擬合(overfitting)的問題,有可能因為資料筆數過少,常見的解決方式有正規化(regularization),加入一個懲罰項,讓某些特徵的權重歸0。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 1)
regression = LinearRegression()
regression.fit(x_train, y_train)
y_prediction = regression.predict(x_test)

最後,檢視模型的績效,MAE、MSE;RMSE以及R平方。

from sklearn.metrics import mean_absolute_error,mean_squared_error, r2_score
  
mae = mean_absolute_error(y_test,y_prediction)
#squared True returns MSE value, False returns RMSE value.
mse = mean_squared_error(y_test,y_prediction) #default=True
rmse = mean_squared_error(y_test,y_prediction,squared=False)
r_square = r2_score(y_test, y_prediction)
print("MAE:", round(mae,2), "\nMSE:", round(mse,2), "\nRMSE:", round(rmse,2), "\nR square:", round(r_square,2))

從結果可以發現,R平方為0.6,還有進步的空間。
https://ithelp.ithome.com.tw/upload/images/20220917/20145688m3HcMbVoWK.png

參考文獻

感謝您的瀏覽,我們明天見!
/images/emoticon/emoticon41.gif


上一篇
【Day 3】線性迴歸 Linear regression
下一篇
【Day 5】邏輯斯迴歸 Logistic regression
系列文
從機器學習到深度學習 - 30天搞懂常見演算法的基礎理論30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言