1. 程式人生 > >sklearn help之嶺回歸 ridge regression

sklearn help之嶺回歸 ridge regression

reg 圖片 img Go wax .com In AR logs

ridge regression: 在最小二乘的基礎上添加一個系數為α的懲罰項,懲罰項為參數向量2範數的平方,可以通過控制α來調節數據集的過擬合問題

技術分享圖片

擬合方法,參數調用與線性回歸相同

嶺回歸優點:可以應用於高度壞條件矩陣(目標值的輕微改變會造成參數的大方差,數據曲線波動加劇,容易導致過擬合問題,因此添加系數為α的懲罰項減小波動)

當α很大時,為了使模型達到最小值,懲罰項必須趨於零,此時主要考慮平方損失;當α趨近於0時,參數向量方差很大,容易導致過擬合。

對於嶺回歸,重點為調整α使平方損失與參數損失達到平衡。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model # X is the 10x10 Hilbert matrix 生成10×10的希爾伯特矩陣和全1矩陣 X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis]) y = np.ones(10) # ############################################################################# # Compute paths n_alphas = 200 #將α從10的-10到10的-2分為200個數 alphas = np.logspace(-10, -2, n_alphas) coefs
= [] for a in alphas: ridge = linear_model.Ridge(alpha=a, fit_intercept=False)#生成ridge對象,不考慮截距 ridge.fit(X, y)#采用對象的fit方法進行嶺回歸擬合 coefs.append(ridge.coef_) # ############################################################################# # Display results ax = plt.gca() #生成一個plot對象 ax.plot(alphas, coefs)
#繪圖 ax.set_xscale(log)#以log為單位繪制坐標間隔 ax.set_xlim(ax.get_xlim()[::-1]) # reverse axis坐標值以-1分隔, plt.xlabel(alpha) plt.ylabel(weights) plt.title(Ridge coefficients as a function of the regularization) plt.axis(tight)#不改變x,y的範圍盡量將數據移動至圖片的中央 plt.show()

1. 嶺回歸的時間復雜度為O(np2)

2. RidgeCV:在不同的α值時,通過交叉驗證得出最優α

RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None,
    normalize=False)
CV默認為留1驗證

sklearn help之嶺回歸 ridge regression