[机器学习]回归--(Simple LR and Multiple LR)
線性回歸是最貼近生活的數據模型之一
簡單的線性回歸
簡單的線性回歸公式如下:
從公式中我們可以看出,簡單線性回歸只有一個自變量x1,b1是自變量的系數,y是因變量。x1可能是連續型或者離散型的數據,所以我們需要通過x1找出最合適的系數b1從而得到關于因變量y的曲線。
我們下面用一個例子來說明,這是一個關于工作經驗與薪水之間關系的表格。分布如下圖所示
我們很容易看出這是符合一個線性回歸的模型,下面我們就要做出回歸的函數并且對未來數據進行預測。
# Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd# Importing the dataset dataset = pd.read_csv('Salary_Data.csv') X = dataset.iloc[:, :-1].values #除了最后一列的其他列 y = dataset.iloc[:, 1].values #第二列# Splitting the dataset into the Training set and Test set from sklearn.cross_validation import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)下面我們需要做的是通過訓練集的X_train與y_train 計算出符合訓練集的曲線,然后將測試集的X_test 帶入得到的曲線中,得到預測的結果y_pred,最后將預測結果y_pred與測試集中的y_test進行比較,看看是否符合分布,從而確定預測是否準確。
# Fitting Simple LinearRegression to the training set from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train,y_train) # 通過train集找到曲線# 對測試集進行預測 y_pred = regressor.predict(X_test)# visualising the Traning set results plt.scatter(X_train, y_train, color = 'red') plt.plot(X_train, regressor.predict(X_train), color = 'blue') plt.title('Salary vs Experience(Traning set)') plt.xlabel('Year of Experience') plt.ylabel('Salary') plt.show()通過學習我們可以得到訓練曲線
下面我們導入測試數據
plt.scatter(X_test, y_test, color = 'red') plt.plot(X_train, regressor.predict(X_train), color = 'blue') plt.title('Salary vs Experience(Traning set)') plt.xlabel('Year of Experience') plt.ylabel('Salary') plt.show()這里需要注意兩點
第一,在導入測試集時我們依然使用訓練集得到的曲線,所以我們的plot函數中參數不便,當然如果你用測試集的數據應該也會得到相同的曲線。
第二有的人覺得既然需要預測數據應該將y_test 替換成 y_pred。 其實不需要這樣的。因為我們y_pred 上的點應該都是和曲線高度重合的
多重線性回歸(Multiple Linear Regression)
多重線性回歸將會不只有一個自變量,并且每個自變量擁有自己的系數且符合線性回歸。
在建立多重線性回歸之前,有這么幾個前提必須要注意一下,這些有助于你判斷數據是否適合使用多重線性回歸:
1, 線性(linearity)
2, 同方差(Homoscedasticity)
3, 多元正態性(Multivariate normality)??
????? 多因素共同影響分布結果
4, 錯誤的獨立性(independence of errors)
????? 每一個變量產生的錯誤將會獨立的影響預測結果,不會對其他變量產生影響
5, 多重共線性的缺乏(lack of multicollinearity)
????? 變量之間存在高度相關關系而使得回歸估算不準確,如接下來要提到的虛擬變量陷阱(dummy variable trap)有可能觸發多重共線性的問題虛擬變量陷阱(Dummy variable trap)
在回歸預測中我們需要所有的數據都是numeric的,但是會有一些非numeric的數據,比如國家,省,部門,性別。這時候我們需要設置虛擬變量(Dummy variable)。做法是將此變量中的每一個值,衍生成為新的變量,是設為1,否設為0.舉個例子,“性別"這個變量,我們可以虛擬出“男”和"女"兩虛擬變量,男性的話“男”值為1,"女"值為,;女性的話“男”值為0,"女"值為1。
但是要注意,這時候虛擬變量陷阱就出現了。就拿性別來說,其實一個虛擬變量就夠了,比如 1 的時候是“男”, 0 的時候是"非男",即為女。如果設置兩個虛擬變量“男”和“女”,語義上來說沒有問題,可以理解,但是在回歸預測中會多出一個變量,多出的這個變量將會對回歸預測結果產生影響。一般來說,如果虛擬變量要比實際變量的種類少一個。
所以在多重線性回歸中,變量不是越多越好,而是選擇適合的變量。這樣才會對結果準確預測。
建立模型
我們可以通過以下五個步驟建立回歸模型:(stepwise Regression)
1, 確立所有的可能(變量all in)
建立所有的個模型包含所有可能的變量
2, 逆向消除(backward elimination)
(1)選擇一個差異等級(significance level)比如SL=0.05, 0.05 意味著此變量對結果有95%的貢獻。 P(A|B) = 0.05
(2)將所有的變量放進你的模型中。
(3)選擇P值最高的變量,如果P>SL。到第四步,否則結束,完成建模。關于變量P值,統計軟件可以計算出并選擇最高P值的變量
(4)移除此變量,并重新進行第三步。
有關逆向消除和逐步回歸的方法,可以參考一下兩個鏈接:
Backward elimination and stepwise regression
Variable Selection
3, 正向選擇(forward selection)
(1)選擇一個差異等級(significance level)比如SL=0.05
(2)建立所有的簡單回歸的模型,并找到最小的P值
(3)確立一個簡單模型,并將擁有最小P值的變量加入此模型
(4)如果P>SL,模型建立成功,否則在進行第三步
4,雙向消除(bidirectionnal elimination)
同時進行逆向消除和正向選擇。
*所有可能的模型:意思是所有變量排列組合成的模型,如果有N個變量,那么一共會有2的N次方個模型(2^N-1)
在R語言中,每一個變量后面會用星號表示此變量對回歸模型的影響,星號越多越重要。
Stepwise Regression 這是賓夕法尼亞州立大學的講解。我覺得挺不錯的
另外,其實這幾步不是很難,關鍵的一點是SL值的確定。還有就是P值的生成。
如何計算P值(p-value)
假定有兩組人群,一組x=0,另一組x=1。從兩組中各隨機抽取2個個體,測量Y
的值,如圖所示,看看這兩組的Y是否相同?
現在各組再多抽取若干個體,數據如圖所示,可以計算各組的均數,這兩個均
數不在同一條線上,這是從所抽取的樣本中估計出來的。從樣本中得到的兩個
均數不等于兩組總體的均數,從樣本中得到的兩均數距離不等于兩個總體均數
的差,t 檢驗是根據兩樣本均數及兩樣本的標準差,計算如果兩總體均數相同的
話,抽樣得到兩樣本均數差達如此之大或更大的可能性多大,就是p 值,p值
<0.05,表示兩者之間的距離顯著。
現在看回歸分析,建立回歸方程如上所示。從方程中看,當x=0時,Y=β0;當x=1
時,Y=β0 + β1。因此,β0表示X=0組Y的均數,β1表示X=1組Y的均數與X=0組Y的均
數的差,ei是每個個體與其所在組均數的差。因此回歸方程對β1= 0 的檢驗等同
于t檢驗兩組均數的比較。
用Python進行操作
我們可以使用之前建立的模板,將數據導入。
今天我們使用一個多變量對商業profit影響的數據集。
在此數據集中,我們確定前四個變量 X(R&D Speed, Administration, Marketing Speed, State)為自變量。
最后一個profit為因變量 y。
import numpy as np import matplotlib.pyplot as plt import pandas as pd# Importing the dataset dataset = pd.read_csv('50_Startups.csv') X = dataset.iloc[:, :-1].values y = dataset.iloc[:, 4].values由于數據中包含state變量,我們用虛擬變量代替
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:] #從1 開始,并非0
將數據集分為訓練集和測試集,我們選擇test size為0.2(4: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)多重線性回歸:
from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, y_train)得到預測結果:
y_pred = regressor.predict(X_test)我們比較一下預測結果(y_pred)和實際結果(y_test)中的差異
其實很多結果還是很接近的。
這樣我們就完成了多元線性回歸的建模過程。其實我們與簡單線性回歸比較一下,代碼完全相同.
所以在sklearn的線性回歸庫中沒有簡單或者多元的區分。但是多元線性回歸很難用圖像表示,因為包含多個自變量。
總結
以上是生活随笔為你收集整理的[机器学习]回归--(Simple LR and Multiple LR)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10怎么安装sql2005数据库
- 下一篇: [机器学习]回归--Polinomial