02-05 scikit-learn庫之線性迴歸

更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython

scikit-learn庫之線性迴歸

因爲scikit-learn庫中sclearn.linear_model提供了多種支持線性迴歸分析的類,本文主要總結一些經常使用的線性迴歸的類,而且因爲是從官方文檔翻譯而來,翻譯會略有偏頗,若是有興趣想了解其餘類的使用方法的同窗也能夠去scikit-learn官方文檔查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model算法

在講線性迴歸理論的時候講到了,線性迴歸的目的是找到一個線性迴歸係數向量\(\omega\),使得輸入特徵\(X\)和輸出向量\(Y\)之間有一個
\[ Y = X\omega \]
的映射關係,接下來的線性迴歸模型和線性迴歸模型的思想相似。假設一個數據集有\(m\)實例,每一個實例有\(n\)個特徵,則其中\(Y\)的維度是\(m*1\)\(X\)的維度是\(m*n\)\(\omega\)的維度是\(n*1\)網絡

使用線性迴歸的目的就是找到一個合適的線性迴歸係數\(\omega\)可以最小化咱們定義的目標函數,又因爲最小化目標函數的優化方法的不一樣,會有不一樣的線性迴歸算法。數據結構

因爲其餘版本的線性迴歸模型的參數相似於LinearRegression,即其餘類型的線性迴歸模型的參數詳解都會跳過,只會講解它與LinearRegression的不一樣之處。咱們接下來的目的就是爲了給你們介紹scikit-learn庫中經常使用的線性迴歸模型。機器學習

1、LinearRegression

1.1 使用場景

LinearRegression迴歸模型,即咱們在線性迴歸中講到的普通線性迴歸,該普通線性迴歸能夠處理一元線性迴歸,也能夠處理多元線性迴歸,可是該類使用的優化方法是最小二乘法函數

一般狀況下該類是咱們使用線性迴歸處理線性問題的首選方法,由於它的目標函數較其餘線性迴歸簡單,計算量小,若是它擬合數據出現過擬合問題則能夠考慮使用正則化形式的線性迴歸。學習

1.2 代碼

import numpy as np
from sklearn.linear_model import LinearRegression

X = np.array([[2, 0], [1, 9], [6, 6], [8, 8]])
# y = 1 * x_0 + 2 * x_1 + 3
y = np.dot(X, np.array([6, 8])) + 3
reg = LinearRegression()
reg.fit(X, y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,
         normalize=False)
reg.score(X, y)
1.0
reg.coef_
array([6., 8.])
reg.intercept_
2.999999999999986
reg.predict(np.array([[8, 6]]))
array([99.])

1.3 參數詳解

  • fit_intercept:截距(偏置單元),bool類型。是否存在截距或者偏置單元。若是使用中心化的數據(中心點爲0的數據),能夠考慮設置fit_intercept=False。默認爲True。
  • normalize:標準化數據,bool類型。當fit_intercept=False的時候,這個參數會被自動忽略;若是fit_intercept=True,迴歸器會標準化輸入數據,該標準化方式爲:減去平均值,而且除以相應的二範數。建議在使用fit()訓練模型以前使用sklearn.preprocessing.StandardScaler對數據標準化,同時設置normalize=False。默認爲False。
  • copy_X:複製數據,bool類型。若是copy_X=False,可能會由於對數據中心化把原始X數據覆蓋。默認爲True。
  • n_jobs:並行數,int類型。n_jobs=1使用1個cpu運行程序;n_jobs=2,使用2個cpu運行程序;n_jobs=-1,使用全部cpu運行程序。默認爲1。

1.4 屬性

  • coef_:array類型,線性迴歸係數。
  • intercept_:array類型,截距。

1.5 方法

  • fit(X,y,sample_weight=None):把數據放入模型中訓練模型,其中sample_weight=None是array類型能夠對訓練集中實例添加權重,即對訓練集中不一樣的數據增長不一樣的權重。
  • get_params([deep]):返回模型的參數,例如能夠用於Pipeline中。
from sklearn.pipeline import Pipeline  

p =Pipeline([  
        ('poly', PolynomialFeatures()),  
        ('linear', LinearRegression(fit_intercept=False))])
lin = p.get_params('linear')['linear']  
print(lin.coef_)
  • predict(X):經過樣本X獲得X對應的預測值。
  • score(X, y[, sample_weight]):基於報告決定係數\(R^2\)評估模型。
  • set_prams(**params):建立模型參數。

1.5.1 報告決定係數

報告決定係數\((R^2)\),能夠理解成MSE的標準版,\(R^2\)的公式爲
\[ R^2 = 1-{\frac {{\frac{1}{n}\sum_{i=1}^n(y^{(i)}-\hat{y^{(i)}})^2}} {{\frac{1}{n}}\sum_{i=1}^n(y^{(i)}-\mu_{(y)})^2} } \]
其中\(\mu_{(y)}\)\(y\)的平均值,即\({{\frac{1}{n}}\sum_{i=1}^n(y^{(i)}-\mu_{(y)})^2}\)\(y\)的方差,公式能夠寫成
\[ R^2 = 1-{\frac{MSE}{Var(y)}} \]
\(R^2\)的取值範圍在\(0-1\)之間,若是\(R^2=1\),則均方偏差\(MSE=0\),即模型完美的擬合數據。測試

2、ARDRegression

當數據集中有不少缺失值或異常值時使用ARDRegression模型,該模型屬於貝葉斯迴歸模型。該模型會對模型輸出\(Y\)和模型參數\(\omega\)做出分佈假設,而且正則化參數alpha也會從數據中估計獲得,雖然該模型對異常值魯棒性很好,但因爲該模型計算量大,耗時,通常狀況不推薦使用,此處很少贅述。優化

3、BayesianRidge

該模型相似於ARDRegression模型,二者都屬於貝葉斯迴歸,不一樣之處在於對\(\omega\)的分佈假設不一樣。因爲該模型的目標函數相似於Ridge模型的目標函數,所以取名BayesianRidge。但因爲該模型一樣計算量大,耗時,通常狀況下也不推薦使用,此處很少贅述。

4、ElasticNet

ElasticNet模型的優化方法是座標軸降低法,該模型由L1正則化和L2正則化的加權獲得,若是使用L1正則化和L2正則化都不行的時候,能夠考慮使用該模型。

該模型因爲增長了參數alphal1_ratio,須要手動調參,一般使用接下來的LassoCV

5、ElasticNetCV

ElasticNetCV模型在目標函數和優化方式相似於ElasticNet,可是能夠本身手動輸入10組、100組參數alphal1_ratio,該模型會經過交叉驗證後給你這組參數中最優模型。

6、Lasso

Lasso模型的優化方法是座標軸降低法,該模型即線性迴歸L1正則化,該。若是數據集的特徵維度較高,可使用該模型,該模型能夠把一些較小的迴歸係數直接變爲\(0\),因爲減小了數據集的特徵維度,也會間接的減輕模型過擬合問題,加強模型的泛化能力。

該模型因爲會把一些較小的迴歸係數變爲\(0\),既能夠找出重要的特徵,對數據集的解釋能力強。

該模型因爲增長了參數alpha,須要手動調參,一般使用接下來的LassoCV

7、LassoCV

LassoCV模型在目標函數和優化方式相似於Lasso,可是能夠本身手動輸入10組、100組參數alpha,該模型會經過交叉驗證後給你這組參數中最優模型。

8、LassoLars

LassoLars模型的優化方法是最小角迴歸法,該模型相似於Lasso模型,可是該模型優化方法爲。

該模型因爲增長了參數alpha,須要手動調參,一般使用接下來的LassoLarsCV

9、LassoLarsCV

LassoLarsCV模型在目標函數和優化方式相似於LassoLars,可是能夠本身手動輸入10組、100組參數alpha,該模型會經過交叉驗證後給你這組參數中最優模型。

10、LassoLarsIC

LassoLarsIC模型相似於Lasso模型,不一樣之處在於它並不使用交叉驗證的方式獲得最優模型。它基於AIC和BIC準則,一輪就能夠找到找到一個最優alpha和最優模型,而交叉驗證若是使用\(k\)折交叉驗證,則須要\(k-1\)次才能找到最優模型。

該模型從上述講述看起來是很完美的,可是該模型要求數據集是由某個假設的模型產生的,而且若是當特徵數量大於實例數量的時候該模型可能會成爲一個較差的模型,因此在工業上通常不推薦使用。

11、MutilTaskLasso

MutilTaskLasso模型的優化方法是座標軸降低法,模型中的MutilTask能夠理解成「多個」而不是「多進程」,即一次性使用多個L1正則化線性迴歸模型擬合數據,有時候也稱之爲共享特徵協同迴歸。

普通線性迴歸的模型是
\[ Y = X\omega \]
其中假設一個數據集有\(m\)實例,每一個實例有\(n\)個特徵,則其中\(Y\)的維度是\(m*1\)\(X\)的維度是\(m*n\)\(\omega\)的維度是\(n*1\)

該模型去掉正則化項是
\[ Y = XW \]
其中假設一個數據集有\(m\)實例,每一個實例有\(n\)個特徵,則其中\(Y\)的維度是\(m*k\)\(X\)的維度是\(m*n\)\(W\)的維度是\(n*k\),其中\(k\)爲迴歸模型的個數,即該模型的fit()方法能夠傳入\(k\)維的特徵。

該模型因爲增長了參數alpha\(k\),須要手動調參,一般使用接下來的MutilTaskLassoCV

12、MutilTaskElasticNet

MutilTaskElasticNet模型的優化方法是座標軸降低法,該模型相似於MutilTaskLasso模型,只是在正則化項上前者使用了L1正則項,後者使用了彈性網絡正則項。

該模型因爲增長了參數alphal1_ratio,須要手動調參,一般使用接下來的LassoCV

十3、MutilTaskLassoCV

MutilTaskLassoCV模型在目標函數和優化方式相似於MutilTaskLasso,可是能夠本身手動輸入10組、100組參數alpha,該模型會經過交叉驗證後給你這組參數中最優模型。

十4、MutilTaskElasticNetCV

該模型在目標函數和優化方式相似於Lasso,可是能夠本身手動輸入10組、100組參數alphal1_ratio,該模型會經過交叉驗證後給你這組參數中最優模型。

十5、OrthogonalMatchingPursuit

OrthogonalMatchingPursuit模型優化方法是前向選擇算法,優化方法速度雖然快,可是精確度較低。

該模型使用參數n_nonzero_coefs限制模型參數\(\omega\)向量中元素非\(0\)的個數,因爲該特徵能夠用於稀疏特徵模型的特徵選擇上,這一點相似於Lasso模型,可是因爲優化方法前向選擇算法,通常不推薦使用。

該模型因爲增長了參數n_nonzero_coefs,須要手動調參,一般使用接下來的LassoCV

十6、OrthogonalMatchingPursuitCV

OrthogonalMatchingPursuitCV模型在目標函數和優化方式相似於OrthogonalMatchingPursuitCV,可是能夠本身手動輸入10組、100組參數n_nonzero_coefs,該模型會經過交叉驗證後給你這組參數中最優模型。

十7、RANSACRegressor

RANSACRegressor模型使用的優化算法是RANSACR算法,該算法能夠控制使用部分區域的數據集訓練模型。

能夠參考《RANSAC算法線性迴歸(波斯頓房價預測)》

十8、Ridge

Ridge模型的優化方法是最小二乘法,該模型即線性迴歸L2正則化,通常使用LinearRegression模型時模型過擬合時可使用該方法。

因爲額外增長了alpha參數,通常狀況下須要本身手動調參,因此能夠在本身測試的時候使用,通常工業上使用較多的是接下來的RidgeCV

十9、RidgeCV

RidgeCV模型在目標函數和優化方式相似於Ridge,可是能夠本身手動輸入10組、100組參數alpha,該模型會經過交叉驗證後給你這組參數中最優模型。

相關文章
相關標籤/搜索