正则化的线性回归:岭回归和 Lasso 回归


引言

:正则化是用来防止过拟合的方法。在最开始学习机器学习的课程时,只是觉得这个方法就像某种魔法一样非常神奇的改变了模型的参数。但是一直也无法对其基本原理有一个透彻、直观的理解。直到最近再次接触到这个概念,经过一番苦思冥想后终于有了我自己的理解。

线性回归很简单,用线性函数拟合数据,用 mean square error (mse) 计算损失(cost),然后用梯度下降法找到一组使 mse 最小的权重。

lasso 回归和岭回归(ridge regression)其实就是在标准线性回归的基础上分别加入 L1 和 L2 正则化(regularization)。

本文的重点是解释为什么 L1 正则化会比 L2 正则化让线性回归的权重更加稀疏,即使得线性回归中很多权重为 0,而不是接近 0。或者说,为什么 L1 正则化(lasso)可以进行 feature selection,而 L2 正则化(ridge)不行。

1. 岭回归

岭回归就是带有正则化的回归。

带有正则化的线性回归-Ridge的API:sklearn.linear_model.Ridge

sklearn.linear_model.Ridge(alpha=1.0) 具有 l 2 l_2 l2 正则化的线性最小二乘法

alpha: 正则化力度 (λ也表示正则化力度 )

coef_: 回归系数

正则化力度对权重有什么影响呢?看下面官网给的一张图。
在这里插入图片描述
正则化力度越大(右到左),模型越来越简单。所以正则化对权重的影响为:正则化力度越来越大,权重越来越趋近于0。

岭回归进行房价预测如下:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
from sklearn.metrics import mean_squared_error

# 1获取数据
lb = load_boston()

# 2分割数据为训练集合测试集
x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)

# 3进行标准化处理,特征值和目标值都必须进行标准化处理
std1 = StandardScaler()
x_train = std1.fit_transform(x_train)
x_test = std1.transform(x_test)
# 目标值标准化
std2 = StandardScaler()
y_train = std2.fit_transform(y_train.reshape(-1, 1))
y_test = std2.transform(y_test.reshape(-1, 1))

# 4.estimator估计器测试
# 4.3岭回归求解预测
rd = Ridge()
# 输入数据一直不断用训练数据建立模型
rd.fit(x_train, y_train)
print("岭回归系数为", rd.coef_)
# 预测测试集房子价格
y_rdPredict = rd.predict(x_test)
y_rdPredict = std2.inverse_transform(y_rdPredict)
print("sgd测试集每个样本的预测价格:", y_rdPredict)
print("梯度下降均方根误差", mean_squared_error(std2.inverse_transform(y_test), y_rdPredict))

输出为:

In[2]: runfile('E:/09-code/06-Turbulent_flow_spectrum/test/test1.py', wdir='E:/09-code/06-Turbulent_flow_spectrum/test')
岭回归系数为 [[-0.11548147  0.14449317  0.01528829  0.08927949 -0.23691287  0.22893065
   0.04618857 -0.3680326   0.30615914 -0.19857008 -0.23237951  0.11767539
  -0.47189179]]
sgd测试集每个样本的预测价格: [[21.3501014 ]
 [15.9881228 ]
 [12.75299688]
 [24.90261784]
      ……
 [14.74345117]
 [23.01862931]]
梯度下降均方根误差 21.856498106333305

线性回归 LinearRegression与Ridge对比:

  • 岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研究中有较大的实用价值。

2. Lasso 回归

3.Lasso回归和岭回归的同和异:

  • 相同
    • 都可以用来解决标准线性回归的过拟合问题。
  • 不同
    • lasso 可以用来做 feature selection,而 ridge 不行。或者说,lasso 更容易使得权重变为 0,而 ridge 更容易使得权重接近 0。
    • 从贝叶斯角度看,lasso(L1 正则)等价于参数 w w w 的先验概率分布满足拉普拉斯分布,而 ridge(L2 正则)等价于参数 w w w 的先验概率分布满足高斯分布。具体参考博客 从贝叶斯角度深入理解正则化 – Zxdon

也许会有个疑问,线性回归还会有过拟合问题?

加入 L1L2 正则化,让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。

可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什幺影响,一种流行的说法是『抗扰动能力强』。具体参见博客 浅议过拟合现象(overfitting)以及正则化技术原理

参考资料

[1] https://www.cnblogs.com/wuliytTaotao/p/10837533.html ;
[2] https://www.cnblogs.com/Belter/p/8536939.html ;
[3] https://blog.csdn.net/weixin_43786255/article/details/100568133;

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值