sklearn--迴歸

一.線性迴歸

LinearRegression類就是咱們平時所說的普通線性迴歸,它的損失函數以下所示:
scikit-learn(sklearn)線性迴歸算法類庫介紹
對於這個損失函數,通常有梯度降低法和最小二乘法兩種極小化損失函數的優化方法,而scikit-learn中的LinearRegression類使用的是最小二乘法。經過最小二乘法,能夠解出線性迴歸係數θ爲:scikit-learn(sklearn)線性迴歸算法類庫介紹
驗證方法:LinearRegression類並無用到交叉驗證之類的驗證方法,須要咱們本身把數據集分紅訓練集和測試集,而後進行訓練優化。
使用場景:通常來講,只要咱們以爲數據有線性關係,LinearRegression類就是咱們的首選。若是發現擬合或者預測的很差,再考慮用其它線性迴歸類庫。
from sklearn.linear_model import LinearRegression
lr=LinearRegression()
lr.fit(train_x,train_y)
print lr.intercept_
print lr.coef_

二.嶺迴歸

因爲LinearRegression沒有考慮過擬合的問題,有可能致使泛化能力較差,這時損失函數能夠加入正則化項,若是加入的是L2範數的正則化項,就是Ridge迴歸的損失函數,以下所示:
scikit-learn(sklearn)線性迴歸算法類庫介紹
其中α是常數係數,須要進行調優,scikit-learn(sklearn)線性迴歸算法類庫介紹是L2範數。
Ridge迴歸在不拋棄任何一個特徵的狀況下,縮小了迴歸係數(是一種縮放的模型),使得模型相對而言比較穩定,不至於過擬合。
對於這個損失函數,通常有梯度降低法和最小二乘法兩種極小化損失函數的優化方法,而scikit-learn中的Ridge類使用的是最小二乘法。經過最小二乘法,能夠解出線性迴歸係數θ爲:
scikit-learn(sklearn)線性迴歸算法類庫介紹
其中E是單位矩陣。
驗證方法:Ridge類並無用到交叉驗證之類的驗證方法,須要咱們本身把數據集分紅訓練集和測試集,須要本身設置好超參數α,而後進行訓練優化。
使用場景:通常來講,只要咱們以爲數據有線性關係,而且使用LinearRegression類擬合的不是特別好,須要正則化時,能夠考慮用Ridge類。可是這個類最大的缺點是每次咱們要本身指定一個超參數α,而後本身評估α的好壞,比較麻煩,通常都會使用下面將會講到的RidgeCV類來跑Ridge迴歸,不推薦直接用這個Ridge類,除非你只是爲了學習Ridge迴歸。
from sklearn.linear_model import Ridge
from sklearn.model_selection import cross_val_score
alphas=np.logspace(-3,2,50)
test_scores =[]
for alpha in alphas:
    clf=Ridge(alpha)
    test_score=np.sqrt(-cross_val_score(clf,X_train,Y_train,cv=10,scoring='neg_mean_squared_error'))
    test_scores.append(np.mean(test_score))
plt.plot(alphas,test_scores)

  RidgeCV類的損失函數和損失函數的優化方法與Ridge類徹底相同,區別在於驗證方法。html

驗證方法:RidgeCV類對超參數α使用了交叉驗證,來幫助咱們選擇一個合適的α值。在初始化RidgeCV類時,咱們能夠提供一組備選的α值。RidgeCV類會幫咱們選擇一個合適的α值,免去了咱們本身去一輪輪篩選α值的苦惱。
from sklearn.linear_model import RidgeCV
# 在初始化RidgeCV類時, 提供一組備選的α值, RidgeCV類會幫咱們選擇一個合適的α值.
ridgecv = RidgeCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 10, 20, 100], cv=5)
# 擬合訓練集
ridgecv.fit(train_X, train_Y)
# 打印最優的α值
print "最優的alpha值: ", ridgecv.alpha_
# 打印模型的係數
print ridgecv.intercept_
print ridgecv.coef_

 三.lasso迴歸

線性迴歸的L1正則化一般稱爲Lasso迴歸,它和Ridge迴歸的區別是在損失函數上增長的是L1正則化項,而不是L2正則化項。L1正則化項也有一個常數係數α來調節損失函數的均方差項和正則化項的權重,具體的Lasso迴歸的損失函數以下所示:
scikit-learn(sklearn)線性迴歸算法類庫介紹
其中m是樣本個數,α是常數係數,須要進行調優。scikit-learn(sklearn)線性迴歸算法類庫介紹是L1範數。
Lasso迴歸可使得一些特徵的係數變小,甚至一些絕對值很是小的係數直接變爲0,加強模型的泛化能力

Lasso迴歸的損失函數的優化方法經常使用的有兩種,分別是座標軸降低法和最小角迴歸法。Lasso類採用的是座標軸降低法,後面講到的LassoLars類採用的是最小角迴歸法python

from sklearn.linear_model import LassoCV
# 在初始化LassoCV類時, 提供一組備選的α值, LassoCV類會幫咱們選擇一個合適的α值.
lassocv = LassoCV(alphas=[0.01, 0.1, 0.5, 1, 3, 5, 7, 10, 20, 100], cv=5)
# 擬合訓練集
lassocv.fit(train_X, train_Y.values.ravel())
# 打印最優的α值
print "最優的alpha值: ", lassocv.alpha_
# 打印模型的係數
print lassocv.intercept_
print lassocv.coef_

 三.多項式迴歸

當咱們擬合的是一個曲線的時候咱們就不能只考慮線性擬合了,咱們能夠考慮多項式擬合,經過加入高次的特徵來來獲得總的特徵樣本,而後在進行線性的擬合git

#多項式擬合
from sklearn.preprocessing import PolynomialFeatures
poly_features = PolynomialFeatures(degree=5, include_bias=False)#其中的degree就是指的最高次項的個數
X_poly = poly_features.fit_transform(X)
print(X_poly.shape)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
print(lin_reg.intercept_, lin_reg.coef_)

 四.邏輯迴歸

邏輯迴歸之因此被分爲線性迴歸的一種,只由於其本質也是線性迴歸,只不過獲得的線性相加求和以後加上了sigmod函數將其二值化算法

from sklearn.linear_model import LogiticRegression
lr==Logiticregression()
lr.fit(x,y)
相關文章
相關標籤/搜索