在學習了「簡單線性回歸」之后玲昧,我們進一步學習應(yīng)用更為廣泛的多元線性回歸,并使用 Python 代碼來實現(xiàn)它。
一乱灵、理解原理
多元線性回歸是對簡單線性回歸的推廣,同時有著不同于簡單線性回歸的特性七冲。
1 概念
多元線性回歸(Multiple Linear Regression)嘗試通過已知數(shù)據(jù)找到一個線性方程來描述兩個及以上的特征(自變量)與輸出(因變量)之間的關(guān)系痛倚,并用這個線性方程來預(yù)測結(jié)果。
多元線性回歸的數(shù)學形式如下:
式中 為隨機項誤差澜躺。
應(yīng)用多元線性回歸時蝉稳,我們需要關(guān)注不同變量對預(yù)測結(jié)果的影響,以及不同的變量之間有什么聯(lián)系掘鄙。
2 使用多元線性回歸分析的前提
線性:自變量和因變量線性相關(guān)
同方差性:隨機誤差項的方差應(yīng)為常數(shù)耘戚,也就是說樣本殘差的平方 不隨自變量的變化而變化
多元正態(tài):殘差應(yīng)符合正態(tài)分布
低多重共線性:使用多元線性回歸時,如果特征(自變量)之間高度相關(guān)操漠,會使回歸估計不準確收津,稱為多重共線性。我們需要保證數(shù)據(jù)沒有或具有較低的多重共線性
3 變量的選擇
使用太多的變量可能會導致模型變得不精確浊伙,尤其是存在對輸出結(jié)果沒有影響或者對其它變量有較大影響的變量時撞秋。選擇變量可以采用以下幾種方法:
- 向前選擇法:從沒有變量開始,使用某種標準嚣鄙,選擇對擬合結(jié)果改進最大的變量吻贿,重復(fù)這個過程直到增加新的變量對結(jié)果沒有明顯的改善。
- 向后剔除法:從具有多個候選變量開始拗慨,使用某種標準廓八,評估去除變量對擬合結(jié)果的負面影響,逐個去除影響最小的變量赵抢,直到去除每個變量都會對結(jié)果造成重要的負面影響剧蹂。
- 雙向?qū)Ρ确?/li>
4 虛擬變量
要想在回歸模型中使用非數(shù)值數(shù)據(jù)類型,可以把它們視為分類數(shù)據(jù)烦却。
分類數(shù)據(jù)宠叼,是指反應(yīng)事物類型的離散數(shù)據(jù)(固定且無序),比如性別(男/女)其爵。在模型中冒冬,我們可以用虛擬變量來表示這種數(shù)據(jù)。虛擬變量通常使用 1摩渺、0 這樣的值來表示肯定或否定的含義简烤。
5 虛擬變量陷阱
虛擬變量陷阱指兩個或多個變量之間高度相關(guān)的情形。簡單的說就是一個變量可以通過其它變量預(yù)測摇幻。例如男性類別可以通過女性類別判斷(女性值為 0 時横侦,表示男性)挥萌,所以對于男女問題,變量應(yīng)該只有一元枉侧。
假設(shè)有 m 個相互關(guān)聯(lián)的類別引瀑,為了解決虛擬變量陷阱,可以在模型構(gòu)建時只選取 m-1 個虛擬變量榨馁。
二憨栽、代碼實現(xiàn)
1 數(shù)據(jù)預(yù)處理
# 導入庫
import pandas as pd
import numpy as np
# 導入數(shù)據(jù)集
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 4 ].values
# 分類數(shù)據(jù)編碼
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)
示例數(shù)據(jù)地址:GitHub - Avik-Jain/100-Days-Of-ML-Code/datasets
這次比起前文「數(shù)據(jù)預(yù)處理」 ,多了一行躲避虛擬變量陷阱的代碼翼虫。
2 使用訓練集擬合多元線性回歸模型
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
3 預(yù)測結(jié)果
y_pred = regressor.predict(X_test)
歡迎關(guān)注 Evan 的博客