1. 程式人生 > 其它 >機器學習筆記(七)——嶺迴歸(sklearn)

機器學習筆記(七)——嶺迴歸(sklearn)

本部落格僅用於個人學習,不用於傳播教學,主要是記自己能夠看得懂的筆記(

學習知識、資源和資料來自:機器學習演算法基礎-覃秉豐_嗶哩嗶哩_bilibili

嶺迴歸就是正則化衍生出來的迴歸方式。正則化的目的是防止過擬合,使曲線儘量平滑,所以在Loss函式後面加了個,其中的λ就是sklearn中嶺迴歸庫ridge裡的alpha。

根據矩陣變換,可得到:

在sklearn的庫中,有RidgeCV函式,可以進行交叉驗證法,來選出Loss最小的alpha。其中store_cv_value可以判斷是否儲存每次交叉驗證的結果。

最後畫一個alpha與Loss函式的關係圖。

資料和相關部落格在底下。

Python程式碼如下:

import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model

data=np.genfromtxt('C:/Users/Lenovo/Desktop/學習/機器學習資料/線性迴歸以及非線性迴歸/longley.csv',delimiter=',')
x_data=data[1:,2:]
y_data=data[1:,1]

als=np.linspace(0.001,1) #建立50個0.001到1的資料
model=linear_model.RidgeCV(alphas=als,store_cv_values=True) #
交叉驗證法,選出平均Loss最小的那一個alpha model.fit(x_data,y_data) print(model.alpha_) print(model.cv_values_.shape) #50個alpha,每個alpha都要交叉驗證16次,得到16*50個Loss plt.plot(als,model.cv_values_.mean(axis=0)) #每個alpha的16個Loss求平均 plt.plot(model.alpha_,min(model.cv_values_.mean(axis=0)),'ro') #最低點 print(y_data[2]) print(model.predict(x_data[2,np.newaxis])) #
預測值與真實值比較 plt.show()

得到結果:

0.40875510204081633
(16, 50)
88.2
[88.11216213]

所用資料:

"","GNP.deflator","GNP","Unemployed","Armed.Forces","Population","Year","Employed"
"1947",83,234.289,235.6,159,107.608,1947,60.323
"1948",88.5,259.426,232.5,145.6,108.632,1948,61.122
"1949",88.2,258.054,368.2,161.6,109.773,1949,60.171
"1950",89.5,284.599,335.1,165,110.929,1950,61.187
"1951",96.2,328.975,209.9,309.9,112.075,1951,63.221
"1952",98.1,346.999,193.2,359.4,113.27,1952,63.639
"1953",99,365.385,187,354.7,115.094,1953,64.989
"1954",100,363.112,357.8,335,116.219,1954,63.761
"1955",101.2,397.469,290.4,304.8,117.388,1955,66.019
"1956",104.6,419.18,282.2,285.7,118.734,1956,67.857
"1957",108.4,442.769,293.6,279.8,120.445,1957,68.169
"1958",110.8,444.546,468.1,263.7,121.95,1958,66.513
"1959",112.6,482.704,381.3,255.2,123.366,1959,68.655
"1960",114.2,502.601,393.1,251.4,125.368,1960,69.564
"1961",115.7,518.173,480.6,257.2,127.852,1961,69.331
"1962",116.9,554.894,400.7,282.7,130.081,1962,70.551

參考部落格:

使用sklearn庫學習線性迴歸(二)_理科男同學-CSDN部落格

numpy.linspace使用詳解 - 螞蟻flow - 部落格園 (cnblogs.com)