前言:前面博文關於線性回歸模型我們可以用梯度下降法或者標準方程法進行訓練,但是兩種方法各有優缺點。特別是標準方程法乙個比較重要的缺點是資料存在不可逆現象則無法訓練出結果,而嶺回歸就是解決標準方程法這一缺點出現的,嶺回歸模型是由帶正則化的代價函式推導得到,他避免資料不可逆的現象,進而得到近似最優解。關於嶺回歸的具體理論此處,到我的一篇博文中檢視
一、sklearn嶺回歸使用示例**
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
import matplotlib.pyplot as plt
# 讀取資料
data = genfromtxt(r'longley.csv', delimiter=',')
# 切分資料
x_data = data[1:, 2:]
y_data = data[1:, 1]
print(y_data)
# 訓練模型
# 生成50個嶺係數的值
lmd = np.linspace(0.001, 1, 50)
model = linear_model.ridgecv(alphas=lmd, store_cv_values=true) # 利用嶺回歸方法交叉驗證各個嶺係數的誤差,進而確定最終選擇哪個嶺係數
model.fit(x_data, y_data)
# 訓練得到的最合適的嶺係數
print(model.alpha_)
# loss值
print(model.cv_values_.shape) # (16,50)每乙個嶺係數對應的交叉驗證損失值為對應列的和取平均
# 繪圖 (驗證求得嶺係數是否合理)
# 嶺係數和loss值的關係
plt.plot(lmd, model.cv_values_.mean(axis=0)) # model.cv_values_.mean(axis=0)是對列求平均值
# 最終選取的嶺係數的位置
plt.plot(model.alpha_, min(model.cv_values_.mean(axis=0)), 'ro')
plt.show()
# 根據訓練的模型進行**
print(model.predict(x_data[2, np.newaxis])) # **結果88.11216213與真實值88.2很接近,所以**效果不錯
二、**執行結果圖
[ 83. 88.5 88.2 89.5 96.2 98.1 99. 100. 101.2 104.6 108.4 110.8
112.6 114.2 115.7 116.9]
0.40875510204081633
(16, 50)
[88.11216213]
sklearn之嶺回歸
嶺回歸 ridge regression 如果資料的特徵比樣本點還多,資料特徵n,樣本個數m,如果n m,則計算 xtx 的逆矩陣時會出錯,因為 xtx 不是滿秩矩陣,所以不可逆。注 xt表示x的轉置矩陣 嶺回歸是有偏估計 嶺回歸代價函式這裡就不貼了 選取 值使得 1.各回歸係數的嶺估計基本穩定 2...
sklearn學習筆記之嶺回歸
嶺回歸是一種專用於共線性資料分析的有偏估計回歸方法,實質上是一種改良的最小二乘估計法,通過放棄最小二乘法的無偏性,以損失部分資訊 降低精度為代價獲得回歸係數更為符合實際 更可靠的回歸方法,對病態資料的擬合要強於最小二乘法。乙個簡單的例子 from sklearn.linear model impor...
嶺回歸與sklearn模型的儲存與載入
帶有正則化的線性回歸 嶺回歸api sklearn.linear model.ridge 語法 sklearn.linear model.ridge alpha 1.0 具有l2正則化的線性最小二乘法 alpha 正則化力度 coef 回歸係數 正則化程度的變化,對結果的影響 正則化力度越大,權重越...