sklearn help之嶺迴歸 ridge regression

ridge regression: 在最小二乘的基礎上添加一個係數爲α的懲罰項,懲罰項爲參數向量2範數的平方,能夠經過控制α來調節數據集的過擬合問題app

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

嶺迴歸優勢:能夠應用於高度壞條件矩陣(目標值的輕微改變會形成參數的大方差,數據曲線波動加重,容易致使過擬合問題,所以添加係數爲α的懲罰項減少波動)code

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

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

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)blog

2. RidgeCV:在不一樣的α值時,經過交叉驗證得出最優α圖片

RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None,
 normalize=False)CV默認爲留1驗證
相關文章
相關標籤/搜索