本文以 Python 語言建立多元回歸(Multiple Regression)模型。
1. 由一元到多元
y= b1*x1 + b0
是一個獨立變數(independent variable)影響了一個相依變數(dependent variable)
但現實的世界裡一個結果往往是多個原因造成的。比如說:鑽石的價格是由重量、形狀、顏色、淨度這四個因素造成;颱風的生行由溫度、溼度、大氣壓力等原因造成。那多元回歸模型就可以使用了!
假設以下條件成立:
.線性
.homoscedasticity 同方差性
. 多元常態 正規性 multivariate normality 常態
.錯誤獨立性
.多行線性:multicollinearity
2. 轉換為多元回歸模型

y= b0 + b1*x1 + b2*x2 + b3*x3
但到了第四項洲地區就不大對:這是一種分類式資料(categorial data)
對分類式資料的處理用以下的方法:
1. 先統計出全部有多少種類:以這張圖來說,總共有3種分類:New York, California, Florida
2. 在將洲地區轉換成 以New York, California, Florida 這三個新的行(column)。有相對應的地區,就用1,其他欄位用0。如果有印象,這就是在資料預先處理時所用的編碼:one-hot encoding。

3.建立多元回歸模型的 5 方式
3.2 向後消去
3.3 向前選擇
3.4 雙向消去
3.5 分數比較
看到這裡可能會覺得很恐怖!幸好,Python 語言都幫我們作到了。我們只要簡單地呼叫函數就可以完成了!
4. 建立程式
進入大數據和人工智慧的第一步,是先觀察資料集合

這是一群2維的資料:特徵值在前面4個維度,最後一行是預測值
4.2 讀進資料
利用 pandas 就可以讀進 CSV 檔案格式資料
import pandas as pd
dataset = pd.read_csv('50_Startups.csv')
4.3 取得特徵資料和預測值
特徵資料包含 0到3 行(column),最後一行是預測值
因此特徵資料 X 是 所有列,最後一行之前
X= dataset.iloc[:,:-1].values
預測值 Y 是 所有列,最後一行
y= dataset.iloc[:,-1].values
4.4 類型資料(categorial data)轉成 one hot encoding
看一下 State 這一行(column),屬於類型資料(categorial data)。因此需要 one hot encoding
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
這裡的資料是第3行
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(),[3])], remainder='passthrough')
X=np.array(ct.fit_transform(X))
轉換後的結果

轉換後可以看到第一行成為三個行
One Hot 編碼的結果放在資料的最前方
這裡是否需要特徵值轉換(feature scaling) ?
在多元回歸不需要,因為每一個變數都有參數
4.5 切割資料成訓練資料和測試資料
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=0)
4.6 訓練模型
很幸運地,在多元回歸模型的使用上和一元/簡單回歸模型是一樣的,只有特徵資料的維度由一元到多元而已:
from sklearn.linear_model import LinearRegression
reg=LinearRegression()
reg.fit(X_train, y_train)
4.7 預測測試資料
模型訓練好,就可以驗證測試資料了!
預測也和一元/簡單回歸模型是一樣的
y_pred=reg.predict(X_test)
但要視覺化就有問題了!因為這裡是多元,無法在二維平面上顯示多筆資料。
只能用觀察的方式:
np.set_printoptions(precision=2)
先設定小數後止有2位數字
print(np.concatenate((y_pred.reshape(len(y_pred),1),y_test.reshape(len(y_test),1)),1))
np.concatenate() 第3個參數
0 是垂直軸,1 是水平軸
由於是預測結果和真實結果比較,真實結果放在後面,是水平軸,就用1
以下是比較後的結果:

請先 登入 以發表留言。