绘制岭系数作为正则化的函数

显示估计器系数中共线性的影响
岭回归是本例中使用的估计器。每种颜色代表系数向量的不同特征,这显示为正则化参数的函数。
正则化:就是让各个向量变得线性无关,也就是让各个属性间关联减弱,从而让矩阵满秩,不会变得奇异化。
此示例还展示了将 Ridge 回归应用于高度病态矩阵的有用性。对于此类矩阵,目标变量的微小变化都会导致计算出的权重出现巨大差异。在这种情况下,设置某个正则化 (alpha) 以减少这种变化(噪声)很有用。
当 alpha 非常大时,正则化效应在平方损失函数中占主导地位,系数趋于零。在路径的末端,由于 alpha 趋于零且解趋于普通最小二乘法,系数表现出很大的振荡。在实践中,有必要以在两者之间保持平衡的方式调整 alpha。
在这里插入图片描述

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

# X 是10*10的希尔伯特矩阵(以函数为基)
# 产生1到10的行向量加上0到9的列向量,自动产生为矩阵,这在数学上不合理,但是程序实现了这种功能
# 相当于两者乘了个单位矩阵然后相加
X = 1. / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])

# 产生1*10的行向量,元素全为1
y = np.ones(10)
n_alphas = 200
# 从10^-10到10^-1产生200的数据点(-10到-2的区间分成199等份)行向量
# 10^(-10+8/199),10^(-10+8/199*2),10^(-10+8/199*3),......
alphas = np.logspace(-10, -2, n_alphas)
coefs = []
for a in alphas:
    ridge = linear_model.Ridge(alpha=a, fit_intercept=False)  # 不使用截距,X,y要居中,w0为0
    ridge.fit(X, y)  # 拟合
    coefs.append(ridge.coef_)  # 保存权重系数[w1,w2,w3,w4,......,w10]
# 展示结果
ax = plt.gca()  # 建个轴
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 function of regularization')
plt.axis('tight')
plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值