在學習了「簡單線性迴歸」以後,咱們進一步學習應用更爲普遍的多元線性迴歸,並使用 Python 代碼來實現它。python
多元線性迴歸是對簡單線性迴歸的推廣,同時有着不一樣於簡單線性迴歸的特性。git
多元線性迴歸(Multiple Linear Regression)嘗試經過已知數據找到一個線性方程來描述兩個及以上的特徵(自變量)與輸出(因變量)之間的關係,並用這個線性方程來預測結果。github
多元線性迴歸的數學形式以下:dom
$$y = b_0 + b_1x_1 + b_2x_2 ...+b_nx_n + u_t$$學習
式中 $u_t(t= 1,2,...,n)$ 爲隨機項偏差。測試
應用多元線性迴歸時,咱們須要關注不一樣變量對預測結果的影響,以及不一樣的變量之間有什麼聯繫。編碼
線性:自變量和因變量線性相關.net
同方差性:隨機偏差項的方差應爲常數,也就是說樣本殘差的平方 $e_t^2$ 不隨自變量的變化而變化code
多元正態:殘差應符合正態分佈orm
低多重共線性:使用多元線性迴歸時,若是特徵(自變量)之間高度相關,會使迴歸估計不許確,稱爲多重共線性。咱們須要保證數據沒有或具備較低的多重共線性
使用太多的變量可能會致使模型變得不精確,尤爲是存在對輸出結果沒有影響或者對其它變量有較大影響的變量時。選擇變量能夠採用如下幾種方法:
要想在迴歸模型中使用非數值數據類型,能夠把它們視爲分類數據。
分類數據,是指反應事物類型的離散數據(固定且無序),好比性別(男/女)。在模型中,咱們能夠用虛擬變量來表示這種數據。虛擬變量一般使用 一、0 這樣的值來表示確定或否認的含義。
虛擬變量陷阱指兩個或多個變量之間高度相關的情形。簡單的說就是一個變量能夠經過其它變量預測。例如男性類別能夠經過女性類別判斷(女性值爲 0 時,表示男性),因此對於男女問題,變量應該只有一元。
假設有 m 個相互關聯的類別,爲了解決虛擬變量陷阱,能夠在模型構建時只選取 m-1 個虛擬變量。
# 導入庫 import pandas as pd import numpy as np # 導入數據集 dataset = pd.read_csv('50_Startups.csv') X = dataset.iloc[ : , :-1].values Y = dataset.iloc[ : , 4 ].values # 分類數據編碼 from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder = LabelEncoder() X[: , 3] = labelencoder.fit_transform(X[ : , 3]) onehotencoder = OneHotEncoder(categorical_features = [3]) X = onehotencoder.fit_transform(X).toarray() # 躲避虛擬變量陷阱 X = X[: , 1:] # 分割訓練集和測試集 from sklearn.cross_validation import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)
示例數據地址:GitHub - Avik-Jain/100-Days-Of-ML-Code/datasets
此次比起前文「數據預處理」 ,多了一行躲避虛擬變量陷阱的代碼。
from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)
歡迎關注 Evan 的博客