為了解決數據的特征比樣本點還多的情況,統計學家引入了嶺回歸。
嶺回歸通過施加一個懲罰系數的大小解決了一些普通最小二乘的問題。回歸系數最大限度地減少了一個懲罰的誤差平方和。
這里是一個復雜的參數,用來控制收縮量,其值越大,就有更大的收縮量,從而成為更強大的線性系數。
Ridge和Line_Model一樣,用fit(x,y)來訓練模型,回歸系數保存在coef_成員中
例子:
在這個例子使用嶺回歸作為估計器。結果中的每個顏色表示的系數向量的一個不同的功能,這是顯示作為正則化參數的函數。在路徑的最后,作為α趨於零和解決方案往往對普通最小二乘,系數表現出大的振盪。
代碼如下:
#-*- encoding:utf-8 -*- """ 嶺回歸example1 @Dylan """ import numpy as np import matplotlib.pyplot as plt from sklearn import linear_model #x是10*10 的Hilbert 矩陣 x=1./(np.arange(1,11)+np.arange(0,10)[:,np.newaxis]) # print(x) y=np.ones(10) #####compute path n_alphas=200 alphas=np.logspace(-10,-2,n_alphas) # print(alphas) clf=linear_model.Ridge(fit_intercept=False) coefs=[] for a in alphas: clf.set_params(alpha=a) clf.fit(x,y) coefs.append(clf.coef_) ###展示結果 ax=plt.gca() ax.set_color_cycle(['b','r','g','c','k','y','m']) ax.plot(alphas,coefs) ax.set_xscale('log') ax.set_xlim(ax.get_xlim()[::-1]) plt.xlabel('alpha') plt.ylabel('weights') plt.title('ridge coefficients as a function of reqularization') plt.axis('tight') plt.show()
其中 x為hilbert矩陣,生成方式值得借鑒。np.logspace()函數文檔鏈接如下:here
結果如下: