1. 程式人生 > >ML Day3多元線性迴歸

ML Day3多元線性迴歸

機器學習100天,每天進步一點點。跟著GitHub開始學習!

英文專案地址https://github.com/Avik-Jain/100-Days-Of-ML-Code

中文專案地址https://github.com/MLEveryday/100-Days-Of-ML-Code


多元線性迴歸用一個線性方程來適配觀測資料,這個線性方程是在兩個以上(包括兩個)的特徵和響應之間構建的一個關係。

虛(擬)變數:在多元迴歸模型中,當遇到資料集是非數值資料型別時,使用分類資料是有效的方法。分類資料,是指反映(事物)類別的資料,是離散資料,其數值個數(分類屬性)有限(但可能很多)且值之間無序。比如按性別分為男、女兩類。在一個迴歸模型中,這些分類值用虛變量表示,取1或0這樣的值,來表示肯定或否定型別。

虛擬變數陷阱:指兩個以上(包含兩個)變數之間高度相關的情形,即存在一個能夠被其他變數預測出的變數。解決虛擬變數陷阱的方法是,類別變數減去一。

y=b0 + b1x1 +b2x2 +b3D1

多元線性迴歸處理的步驟為:

1 資料預處理

匯入相關庫、匯入資料集、檢查缺失資料、資料分類、編輯虛擬變數並注意避免虛擬變數陷阱、特徵縮放

2 在訓練集上訓練模型

與簡單線性迴歸處理相同。使用sklearn.linear_model庫的LinearRegression類,呼叫fit方法對資料集進行訓練。

3 預測結果

用predict方法在測試集上進行測試,並觀察結果。

4 評估結果

使用sklearn中r2_score評估結果。模型越好,r2趨於1。

程式碼:

# Importing the libraries
import pandas as pd  #用於匯入和管理資料集
import numpy as np  #包含數學計算函式

# Importing the dataset
dataset = pd.read_csv('../datasets/50_Startups.csv')
X = dataset.iloc[ : , :-1].values  #iloc是取矩陣的某行某列
Y = dataset.iloc[ : ,  4 ].values

# Encoding Categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.fit_transform(X[ : , 3])
onehotencoder = OneHotEncoder(categorical_features = [3])  #第3列進行獨熱編碼
X = onehotencoder.fit_transform(X).toarray()  #不加toarray()的話,輸出稀疏的儲存格式

# Avoiding Dummy Variable Trap 避免虛擬變數陷阱
X = X[: , 1:]

# Splitting the dataset into the Training set and Test set
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)

# Fitting Multiple Linear Regression to the Training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)

# Predicting the Test set results
y_pred = regressor.predict(X_test)

# regression evaluation
from sklearn.metrics import r2_score  #r2決定係數(擬合優度),模型越好:r2趨於1
print(r2_score(Y_test,y_pred))

結果:0.9347068473282446