目錄html
更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython
因爲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庫中經常使用的線性迴歸模型。機器學習
LinearRegression
迴歸模型,即咱們在線性迴歸中講到的普通線性迴歸,該普通線性迴歸能夠處理一元線性迴歸,也能夠處理多元線性迴歸,可是該類使用的優化方法是最小二乘法。函數
一般狀況下該類是咱們使用線性迴歸處理線性問題的首選方法,由於它的目標函數較其餘線性迴歸簡單,計算量小,若是它擬合數據出現過擬合問題則能夠考慮使用正則化形式的線性迴歸。學習
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.])
from sklearn.pipeline import Pipeline p =Pipeline([ ('poly', PolynomialFeatures()), ('linear', LinearRegression(fit_intercept=False))]) lin = p.get_params('linear')['linear'] print(lin.coef_)
報告決定係數\((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\),即模型完美的擬合數據。測試
當數據集中有不少缺失值或異常值時使用ARDRegression
模型,該模型屬於貝葉斯迴歸模型。該模型會對模型輸出\(Y\)和模型參數\(\omega\)做出分佈假設,而且正則化參數alpha也會從數據中估計獲得,雖然該模型對異常值魯棒性很好,但因爲該模型計算量大,耗時,通常狀況不推薦使用,此處很少贅述。優化
該模型相似於ARDRegression
模型,二者都屬於貝葉斯迴歸,不一樣之處在於對\(\omega\)的分佈假設不一樣。因爲該模型的目標函數相似於Ridge
模型的目標函數,所以取名BayesianRidge
。但因爲該模型一樣計算量大,耗時,通常狀況下也不推薦使用,此處很少贅述。
ElasticNet
模型的優化方法是座標軸降低法,該模型由L1正則化和L2正則化的加權獲得,若是使用L1正則化和L2正則化都不行的時候,能夠考慮使用該模型。
該模型因爲增長了參數alpha和l1_ratio,須要手動調參,一般使用接下來的LassoCV
。
ElasticNetCV
模型在目標函數和優化方式相似於ElasticNet
,可是能夠本身手動輸入10組、100組參數alpha和l1_ratio,該模型會經過交叉驗證後給你這組參數中最優模型。
Lasso
模型的優化方法是座標軸降低法,該模型即線性迴歸L1正則化,該。若是數據集的特徵維度較高,可使用該模型,該模型能夠把一些較小的迴歸係數直接變爲\(0\),因爲減小了數據集的特徵維度,也會間接的減輕模型過擬合問題,加強模型的泛化能力。
該模型因爲會把一些較小的迴歸係數變爲\(0\),既能夠找出重要的特徵,對數據集的解釋能力強。
該模型因爲增長了參數alpha,須要手動調參,一般使用接下來的LassoCV
。
LassoCV
模型在目標函數和優化方式相似於Lasso
,可是能夠本身手動輸入10組、100組參數alpha,該模型會經過交叉驗證後給你這組參數中最優模型。
LassoLars
模型的優化方法是最小角迴歸法,該模型相似於Lasso
模型,可是該模型優化方法爲。
該模型因爲增長了參數alpha,須要手動調參,一般使用接下來的LassoLarsCV
。
LassoLarsCV
模型在目標函數和優化方式相似於LassoLars
,可是能夠本身手動輸入10組、100組參數alpha,該模型會經過交叉驗證後給你這組參數中最優模型。
LassoLarsIC
模型相似於Lasso
模型,不一樣之處在於它並不使用交叉驗證的方式獲得最優模型。它基於AIC和BIC準則,一輪就能夠找到找到一個最優alpha和最優模型,而交叉驗證若是使用\(k\)折交叉驗證,則須要\(k-1\)次才能找到最優模型。
該模型從上述講述看起來是很完美的,可是該模型要求數據集是由某個假設的模型產生的,而且若是當特徵數量大於實例數量的時候該模型可能會成爲一個較差的模型,因此在工業上通常不推薦使用。
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
。
MutilTaskElasticNet
模型的優化方法是座標軸降低法,該模型相似於MutilTaskLasso
模型,只是在正則化項上前者使用了L1正則項,後者使用了彈性網絡正則項。
該模型因爲增長了參數alpha和l1_ratio,須要手動調參,一般使用接下來的LassoCV
。
MutilTaskLassoCV
模型在目標函數和優化方式相似於MutilTaskLasso
,可是能夠本身手動輸入10組、100組參數alpha,該模型會經過交叉驗證後給你這組參數中最優模型。
該模型在目標函數和優化方式相似於Lasso
,可是能夠本身手動輸入10組、100組參數alpha和l1_ratio,該模型會經過交叉驗證後給你這組參數中最優模型。
OrthogonalMatchingPursuit
模型優化方法是前向選擇算法,優化方法速度雖然快,可是精確度較低。
該模型使用參數n_nonzero_coefs限制模型參數\(\omega\)向量中元素非\(0\)的個數,因爲該特徵能夠用於稀疏特徵模型的特徵選擇上,這一點相似於Lasso
模型,可是因爲優化方法前向選擇算法,通常不推薦使用。
該模型因爲增長了參數n_nonzero_coefs,須要手動調參,一般使用接下來的LassoCV
。
OrthogonalMatchingPursuitCV
模型在目標函數和優化方式相似於OrthogonalMatchingPursuitCV
,可是能夠本身手動輸入10組、100組參數n_nonzero_coefs,該模型會經過交叉驗證後給你這組參數中最優模型。
RANSACRegressor
模型使用的優化算法是RANSACR算法,該算法能夠控制使用部分區域的數據集訓練模型。
能夠參考《RANSAC算法線性迴歸(波斯頓房價預測)》。
Ridge
模型的優化方法是最小二乘法,該模型即線性迴歸L2正則化,通常使用LinearRegression
模型時模型過擬合時可使用該方法。
因爲額外增長了alpha參數,通常狀況下須要本身手動調參,因此能夠在本身測試的時候使用,通常工業上使用較多的是接下來的RidgeCV
。
RidgeCV
模型在目標函數和優化方式相似於Ridge
,可是能夠本身手動輸入10組、100組參數alpha,該模型會經過交叉驗證後給你這組參數中最優模型。