用Python實現嶺迴歸算法與Lasso迴歸算法並處理Iris數據集

在介紹嶺迴歸算法與Lasso迴歸算法以前,先要回顧一下線性迴歸算法。根據線性迴歸模型的參數估計公式可知可知,獲得的前提是矩陣可逆。換句話說就是樣本各個特徵(自變量)之間線性無關。然而在實際問題中,經常會出現特徵之間出現多重共線性的狀況,使得行列式的值接近於0,最終形成迴歸係數無解或者無心義。算法

 爲了解決這個問題,嶺迴歸算法的方法是在線性迴歸模型的目標函數之上添加一個l2的正則項,進而使得模型的迴歸係數有解。具體的嶺迴歸目標函數可表示爲以下:數組

 

在Python中,嶺迴歸算法的實現方法以下。機器學習

 在Python中sklearn算法包已經實現了全部基本機器學習的算法。直接函數

from sklearn.linear_model import Ridge,RidgeCV

就能夠調用該算法。學習

 Iris數據集的加載與預處理已在前文中介紹過,此處再也不累述。定義嶺迴歸算法的方法爲以下:測試

rigdeCV = RidgeCV(alphas=Lambdas,normalize=True,scoring='neg_mean_squared_error',cv=15)

其中alphas用於指定多個λ值的元組或數組對象,默認該參數包含0.一、1和10三個值。normalize指是否對數據集進行歸一化處理。scoring指的是用於評估模型的度量方法,此處爲RMSE均分偏差。cv指交叉驗證的重數。spa

此處我使用的是15重交叉驗證法肯定的λ值。上面Lambdas爲logspace方法生成的數組。code

Lambdas = np.logspace(-5,2,200)

最後訓練,測試:orm

rigdeCV.fit(X_train,Y_train) predictedResult = rigdeCV.predict(X_test)

注意此處predictedResult爲Series不是List。對象

此時嶺迴歸算法分類正確率爲0.8。

 

 

嶺迴歸算法當然解決了線性迴歸模型中矩陣不可逆的問題。但嶺迴歸算法不管如何會保留建模時全部的變量,沒法下降模型的複雜度。爲了克服嶺迴歸算法的缺點,Lasso迴歸算法被提了出來。

 與嶺迴歸算法相似,Lasso迴歸算法一樣屬於縮減性估計。並且在迴歸係數的縮減過程當中,能夠將一些不重要的迴歸係數縮減爲0,以打到變量篩選的目的。Lasso迴歸算法的目標函數爲以下:

具體在Python上實現的方式與嶺迴歸算法相似,先導入liner_model中的LassoCV類,而後就可使用:

lasso_cv = LassoCV(alphas=Lambdas,normalize=True,cv=10,max_iter=10000)

這裏max_iter指的是模型最大迭代次數。其它參數與嶺迴歸相似。

此時Lasso迴歸算法的準確率爲0.8。

 

因爲嶺迴歸算法和Lasso迴歸算法的類似性,在本次實驗中,兩者的分類結果徹底相同,分類準確率同爲0.8。考慮到線性迴歸並非特別適合分類問題,因此這種結果也能夠接受。下一步的學習方向是GBDT以及多種算法的綜合模型。

相關文章
相關標籤/搜索