Python回归 岭回归(Ridge Regression)

岭回归是一种专门用于共线性数据分析的有偏估计回归方法,实质上时改良的最小二乘估计法,通过放弃最小二乘法的无偏性(在反复抽样的情况下,样本均值的集合的期望等于总体均值),以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对共线性问题和病态数据的拟合要强于最小二乘法经,常用于多维问题与不适定问题(ill-posed problem)。
岭回归通过引入一个惩罚变量解决了普通最小二乘法的问题。岭回归相关系数是的惩罚残差平方和最小:
这里写图片描述
这里写图片描述是收缩率,既控制模型复杂度的因子。

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

#创建一个希伯特矩阵(高度病态,任何一个元素的点发生变动,整个矩阵的行列式的值和逆矩阵都会发生巨大变化)
#这里的加法运算类似于矩阵相乘
X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])
y = np.ones(10)

#计算路径
n_alphas = 200
alphas = np.logspace(-10, -2, n_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.plot(alphas, coefs)
#设置x轴的刻度显示方式
ax.set_xscale('log')
#翻转x轴
ax.set_xlim(ax.get_xlim()[::-1])
#设置x、y标签以及标题
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
#使得坐标轴最大值和最小值与数据保持一致
plt.axis('tight')
plt.show()

Python回归 岭回归(Ridge Regression)_第1张图片
上图展示了岭回归模型的解的10个分量随正则化参数Alpha变化而变化的趋势。每一种颜色代表了不同的相关系数向量特征,它随着传入的正则化参数Alpha的变化而变化。由于图像形态,岭回归又称为脊回归。
这个例子展示了岭回归处理病态矩阵( ill-conditioned matrices)的优势。在病态矩阵里每一个目标变量微小的变动都会产生巨大的方差。对于这种情况就需要设置一个比较合适的正则化参数来减少离差(噪声)。
当正则参数Alpha非常大的时候,正则化的影响支配了二乘法函数,相关系数趋近于0。在路径的结尾,当正则参数alpha趋近于0的时候,结果解趋近于了普通最小二乘法,系数表现出了很大的震荡。

设置正则参数
在实践中要不断的调节正则参数Alpha在上述过程中寻求一种平衡。
RidgeCV实现了岭回归的交叉验证,下面是一种高效的交叉验证方式-留一交叉验证(leave-one-out):

>>> from sklearn import linear_model
>>> clf = linear_model.RidgeCV(alphas=[0.1, 1.0, 10.0])
>>> clf.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1])       
RidgeCV(alphas=[0.1, 1.0, 10.0], cv=None, fit_intercept=True, scoring=None,
    normalize=False)
>>> clf.alpha_                                      
0.1

例子:Classification of text documents using sparse features

你可能感兴趣的:(scikit)