绘制L2正则化函数的岭系数图¶
岭回归是在这个例子中使用的估计器。左图中的每一种颜色表示系数向量的一个不同维度,表示为正则化参数的函数。右图表显示了解决方案的有多精确。此示例说明如何通过岭回归找到定义良好的解,以及正则化如何影响系数及其值。右边的图显示了作为正则化函数的系数与估计与的差异是如何变化的。
在这个例子中,因变量Y被设为输入特征的函数:y=X*w+c,系数向量w从正态分布随机抽样,而偏差项c被设置为常数。
当α趋于零时,岭回归发现的系数向随机采样向量w稳定。对于大 alpha(强正则化),系数较小(最终收敛于0),从而得到一个更简单的有偏解。这些依赖关系可以在左边的图上观察到。
右图显示了模型发现的系数与所选向量w之间的均方误差,正则化程度较低的模型检索到的精确系数(误差等于0),强正则化模型增加了误差。
请注意,在这个例子中,数据是无噪声的,因此可以提取精确的系数。
# Author: Kornel Kielczewski -- <kornel.k@plusnet.pl>
print(__doc__)
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
clf = Ridge()
X, y, w = make_regression(n_samples=10, n_features=10, coef=True,
random_state=1, bias=3.5)
coefs = []
errors = []
alphas = np.logspace(-6, 6, 200)
# Train the model with different regularisation strengths
for a in alphas:
clf.set_params(alpha=a)
clf.fit(X, y)
coefs.append(clf.coef_)
errors.append(mean_squared_error(clf.coef_, w))
# Display results
plt.figure(figsize=(20, 6))
plt.subplot(121)
ax = plt.gca()
ax.plot(alphas, coefs)
ax.set_xscale('log')
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.subplot(122)
ax = plt.gca()
ax.plot(alphas, errors)
ax.set_xscale('log')
plt.xlabel('alpha')
plt.ylabel('error')
plt.title('Coefficient error as a function of the regularization')
plt.axis('tight')
plt.show()
脚本的总运行时间:(0分0.376秒)