
多重線性回歸(multiple linear regression)
多重線性回歸的概念
多重線性回歸是基于觀測數(shù)據(jù),給2個以上特征與結果構建線性模型的等式。構建多重線性回歸模型的步驟與單線性回歸模型類似。其中不同在于評價。你將使用評價去找出哪一個因素對預測結果有更大的影響以及不同變量之間的相關性。
假設(對于一個成功的回歸分析,確認以下四點假設十分重要)
- 線性(linearity):自變量和因變量之間的關系應該是線性的。
- 同方差性(homoscedasticity):誤差保持不變。這個不是很理解,感覺是要讓誤差恒定?
- 多元正態(tài)(multivariate normality):多重回歸呈現(xiàn)正態(tài)分布。
- 缺乏多重共線性:假定在數(shù)據(jù)中有很少或沒有多重共線性。多重共線性在特征/變量之間不是獨立的時候出現(xiàn)。所以說,只有變量之間相互獨立,才不會出現(xiàn)多重共線性,這是理想的?
注意
過多的變量有可能會導致模型變得不準確。尤其是當某些變量對結果沒有任何影響或?qū)ζ渌兞坑酗@著影響的時候。有很多方法去選擇合適的變量。
- 前向選擇(forward selection)
- 后向消除(backward elimination)
- 雙向比較(bi-directional comparision)
虛擬變量(dummy variables)
在第一天的練習中已經(jīng)使用imputer方法去對Yes和No進行虛擬變量轉換。在多重回歸模型中使用分類數(shù)據(jù)是一個很有效的方法,其中包括將非數(shù)字類型的數(shù)據(jù)引入回歸模型中。分類數(shù)據(jù)是指數(shù)據(jù)值代表類別(數(shù)據(jù)值是一個固定的無序的數(shù)值)。例如,性別。在回歸模型中這些數(shù)據(jù)能夠被虛擬變量表達(將男女兩個性別轉為0、1)。感覺這里的分類變量就是量化研究中的名義變量,要使用特定數(shù)值進行表達
虛擬變量陷阱
虛擬變量陷阱是一個方案,在2個以上變量有高相關性時;簡單來說,一個變量能夠被另一個變量預測。沒看懂,我又查了一下知乎依舊沒看懂,應該是由于虛擬變量引入時個數(shù)的原因,與前面多重共線性相關,https://zhuanlan.zhihu.com/p/26640957
解決虛擬變量陷阱的方法是丟掉一個分類變量,如果模型中有m個分類變量,在模型里只使用m-1個,漏掉的那個變量可以認為是引用值。
第一步:數(shù)據(jù)預處理
- 引入庫
- 引入數(shù)據(jù)集
import numpy as np
import pandas as pd
data=pd.read_excel(r'.\50_Startups.xlsx')
#通過iloc獲取數(shù)據(jù)的所有值
X=data.iloc[:,:-1].values
Y=data.iloc[:,4].values
data.head()
- 檢查丟失數(shù)據(jù)
- 分類變量編碼
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder=LabelEncoder()
print(X[:,3])
#使用LabelEncoder對標簽數(shù)值進行標準化
X[:,3]=labelencoder.fit_transform(X[:,3])
print(X[:,3])
#對標簽進行獨熱碼處理
onehotencoder=OneHotEncoder(categorical_features=[3])
X=onehotencoder.fit_transform(X).toarray()
print(X)
#防止虛擬變量陷阱,從第二個開始取
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)
第二步:用訓練集擬合模型
這一步與單線性回歸類似
使用LinearRegression中的regressor,使用fit()方法。
from sklearn.linear_model import LinearRegression
regressor=LinearRegression()
regressor.fit(X_train,Y_train)
第三步:預測測試結果
在這里預測觀測數(shù)據(jù)。輸出值為Y_pred。
y_pred=regressor.predict(X_test)
翻譯的好累啊,兩個概念不是很懂,多重線性和虛擬變量陷阱,不過工程的話照做就是了。
本次練習的鏈接https://github.com/jwc19890114/-02-learning-file-100days/blob/master/03.ipynb
數(shù)據(jù)集為50_Startups.xlsx