文章目录

  • 欠拟合和过拟合
  • 过拟合特征
  • 岭回归和Lasso回归
    • 岭回归
    • Lasso回归
  • 仿真实例

欠拟合和过拟合

此前已经介绍了线性模型LinearRegression的原理和具体实现。在代码验证阶段,使用wave数据集得到的结果是:训练集得分为0.67,测试集得分为0.66。此时,两者得分是十分接近的,但是距离满分1还有很大差距,这是欠拟合的表现,解决该问题的一种方案是增加更多有效的特征。

除了欠拟合,还有一种常见的情况:过拟合。先看如下一个例子:将LinearRegression应用到bostons数据集上

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegressiondef lr_by_sklearn(X, y):X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)lr = LinearRegression().fit(X_train, y_train)print('lr: training set score: {:.2f}'.format(lr.score(X_train, y_train)))print('lr: test set score: {:.2f}'.format(lr.score(X_test, y_test)))if __name__ == '__main__':X_arr, y_arr = bostons()lr_by_sklearn(X_arr, y_arr)

运行后,得到结果为

lr: training set score: 0.95
lr: test set score: 0.61

从结果上可以看出,模型在训练集上表现很好,但是在测试集上表现较差,这就是过拟合。但事实上,我们训练模型的目标就是希望模型能在测试集上表现优秀,从而保证模型的泛化能力,因此过拟合并不是我们希望看到的结果。

过拟合特征

为了解决过拟合问题,我们先看一下出现过拟合时,线性模型得到的数据特征。经分析发现,线性模型的权重系数往往非常大。这是因为过拟合时,线性模型为了很好地拟合每一个数据点,拟合函数的波动往往会很大,即在某些很小的区间里,函数值的变化很剧烈。由于自变量本身可大可小,所以权重系数就必须足够大。

还是用上面的实例,我们输出权重系数的最大和最小值,作为对比,将X和y的最大和最小值也输出。可以发现,X和y的范围都比较小,但是权重系数却高出了2个数量级。

In[3]: [max(lr.coef_), min(lr.coef_)]
Out[3]: [2980.7814393954595, -2239.8694355606854]
In[4]: [X.min(), X.max()]
Out[4]: [0.0, 1.0]
In[5]: [y.min(), y.max()]
Out[5]: [5.0, 50.0]

岭回归和Lasso回归

正则化(regularization)是在模型的目标函数中增加显式约束,限制权重系数的大小,从而在一定程度上减少过拟合。最常见的有两种:岭回归和Lasso回归。

岭回归

岭回归是一种在线性模型基础上添加L2范数的正则化方式
J=∑i=1n(yi−(wixi+bi))2+λ∑i=1nwi2J=\sum_{i=1}^n(y_i-(w_ix_i+b_i))^2+\lambda\sum_{i=1}^nw_i^2J=i=1∑n​(yi​−(wi​xi​+bi​))2+λi=1∑n​wi2​
将上式做一下归并
J=∑i=1n[((yi−bi)−wixi)2+λwi2]J=\sum_{i=1}^n[((y_i-b_i)-w_ix_i)^2+\lambda w_i^2]J=i=1∑n​[((yi​−bi​)−wi​xi​)2+λwi2​]
求和公式中的"[]"部分定义为一个新的变量fif_ifi​,并将bib_ibi​合并到yiy_iyi​中
f=(y−wx)2+λw2f=(y-wx)^2+\lambda w^2f=(y−wx)2+λw2
上式中,为了方便书写,去掉了下标iii。为了得到最佳的www,对fff求一阶倒数,并令其等于0
f′=−2(y−wx)x+2λw=0f'=-2(y-wx)x+2\lambda w=0f′=−2(y−wx)x+2λw=0
最终得到
w=xyx2+λw=\frac{xy}{x^2+\lambda}w=x2+λxy​
显然,λ\lambdaλ的引入,可以降低www的值。λ\lambdaλ越大,www越小,过拟合风险越低,但是也会因此带来模型偏差的增大。此处,模型偏差的含义为真值与预测值之间的差值绝对值
∣y−w∗x∣=∣y−x2yx2+λ∣|y-w*x|=|y-\frac{x^2y}{x^2+\lambda}|∣y−w∗x∣=∣y−x2+λx2y​∣当λ\lambdaλ为0时,偏差也为0;λ\lambdaλ越大,偏差越大。即,λ\lambdaλ在其中起到了调和模型偏差和过拟合风险的作用。

Lasso回归

Lasso回归则是在线性模型的基础上添加了L1范数
J=∑i=1n(yi−(wixi+bi))2+λ∑i=1n∣wi∣J=\sum_{i=1}^n(y_i-(w_ix_i+b_i))^2+\lambda\sum_{i=1}^n \mid{w_i}\midJ=i=1∑n​(yi​−(wi​xi​+bi​))2+λi=1∑n​∣wi​∣
关于上式最优解的推导,有些难,此处直接引用文章,并给出结果:

定义mj=∑i=1nxij(yi−∑k≠jwkxik)m_j=\sum_{i=1}^nx_{ij}(y_i-\sum_{k \neq j}w_kx_{ik})mj​=∑i=1n​xij​(yi​−∑k=j​wk​xik​),nj=∑i=1xij2n_j=\sum_{i=1}x_{ij}^2nj​=∑i=1​xij2​,那么wjw_jwj​的值为
wj={(mj−λ2)/nj,if  mj>λ20,if  mj∈[−λ2,λ2](mj+λ2)/nj,if  mj<λ2w_j=\left\{ \begin{aligned} (m_j-\frac{\lambda}{2})/n_j,\ \ \text{if} \ \ m_j > \frac{\lambda}{2}\\ 0, \ \ \text{if} \ \ m_j \in [-\frac{\lambda}{2}, \frac{\lambda}{2}]\\ (m_j+\frac{\lambda}{2})/n_j,\ \ \text{if} \ \ m_j < \frac{\lambda}{2} \end{aligned} \right. wj​=⎩⎨⎧​(mj​−2λ​)/nj​,  if  mj​>2λ​0,  if  mj​∈[−2λ​,2λ​](mj​+2λ​)/nj​,  if  mj​<2λ​​
此处我们不必去细致关注每个变量的含义,更有意思的方面在于,有些www直接变为0了,相当于模型筛选了一批不重要的特征,将其权重系数设置为0。这是岭回归和Lasso之间的很大差异之一:岭回归倾向于让www值变小,而Lasso回归将部分www设置为0。

仿真实例

以下代码评估了线性回归、岭回归和Lasso回归三种模型在bostons数据集上的表现,同时针对核心指标,进行了输出和对比:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression, Ridge, Lasso, RidgeCV, LassoCV
import numpy as npdef lr_by_sklearn(X, y):# 数据集拆分X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)# 线性模型lr = LinearRegression().fit(X_train, y_train)print('lr: training set score: {:.2f}'.format(lr.score(X_train, y_train)))print('lr: test set score: {:.2f}'.format(lr.score(X_test, y_test)))print('lr: min_coef: {:.2f}, max_coef:  {:.2f}'.format(min(lr.coef_), max(lr.coef_)))print('\n=================================\n')# 构造不同的lambda值,RidgeCV交叉验证得到最佳lambdaLambdas = np.logspace(-5, 2, 20)rdCV = RidgeCV(alphas=Lambdas, cv=5)rdCV.fit(X_train, y_train)print('Ridge_best_lambda: {}'.format(rdCV.alpha_))# 输出最佳Ridge模型指标best_rd = Ridge(alpha=rdCV.alpha_).fit(X_train, y_train)print('rd: training set score: {:.2f}'.format(best_rd.score(X_train, y_train)))print('rd: test set score: {:.2f}'.format(best_rd.score(X_test, y_test)))print('rd: number of features used: {}'.format(np.sum(best_rd.coef_ != 0)))print('rd: min_coef:  {:.2f}, max_coef:  {:.2f}'.format(min(best_rd.coef_), max(best_rd.coef_)))print('\n=================================\n')# 构造不同的lambda值,LassoCV交叉验证得到最佳lambdaLambdas = np.logspace(-5, 2, 20)lsCV = LassoCV(alphas=Lambdas, max_iter=1000000, cv=5)lsCV.fit(X_train, y_train)print('Lasso_best_lambda: {}'.format(lsCV.alpha_))# 输出最佳Ridge模型指标best_ls = Lasso(alpha=lsCV.alpha_, max_iter=1000000).fit(X_train, y_train)print('ls: training set score: {:.2f}'.format(best_ls.score(X_train, y_train)))print('ls: test set score: {:.2f}'.format(best_ls.score(X_test, y_test)))print('ls: number of features used: {}'.format(np.sum(best_ls.coef_ != 0)))print('ls: min_coef: {:.2f}, max_coef: {:.2f}'.format(min(best_ls.coef_), max(best_ls.coef_)))if __name__ == '__main__':X_arr, y_arr = bostons()lr_by_sklearn(X_arr, y_arr)

运行结果如下。从结果上可以看出,由于引入了正则化,岭回归模型(rd)和Lasso回归模型(ls)在训练集上的分数略低于线性模型(lr),从0.95降低至0.93,但是在测试集上的分数却有了明显的提升,从0.61提升至0.76+;权重系数方面,rd和ls也从千量级降低至十量级;模型使用的特征数量方面,rd使用了所有的特征,共计104个,而ls只使用了其中的60个。

lr: training set score: 0.95
lr: test set score: 0.61
lr: min_coef: -2239.87, max_coef:  2980.78
=================================
Ridge_best_lambda: 0.04832930238571752
rd: training set score: 0.93
rd: test set score: 0.76
rd: number of features used: 104
rd: min_coef:  -21.64, max_coef:  27.12
=================================
Lasso_best_lambda: 0.001623776739188721
ls: training set score: 0.93
ls: test set score: 0.77
ls: number of features used: 60
ls: min_coef: -29.34, max_coef: 47.46

线性模型优化:岭回归和Lasso回归相关推荐

  1. 一文读懂线性回归、岭回归和Lasso回归

    (图片由AI科技大本营付费下载自视觉中国) 作者 | 文杰 编辑 | yuquanle 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失 ...

  2. lasso回归_一文读懂线性回归、岭回归和Lasso回归

    (图片由AI科技大本营付费下载自视觉中国) 作者 | 文杰 编辑 | yuquanle 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失 ...

  3. python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...

    点击上方蓝色字体,关注AI小白入门哟 作者 | 文杰 编辑 | yuquanle 本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失,然后 ...

  4. 应用预测建模第六章-线性回归-预测化合物溶解度练习-R语言(多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网)

    模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...

  5. 线性回归、岭回归和Lasso回归

    1 线性回归 假设有数据有: T={(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}T=\{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),.. ...

  6. 从线性到非线性模型-线性回归,岭回归,Lasso回归,局部加权线性回

    从线性到非线性模型 1.线性回归,岭回归,Lasso回归,局部加权线性回归 2.logistic回归,softmax回归,最大熵模型 3.广义线性模型 4.Fisher线性判别和线性感知机 5.三层神 ...

  7. ESL3.4 学习笔记(奇异值分解与拉格朗日乘子法下的岭回归,Lasso回归,最小角回归及三者对比分析)

    3.4 收缩的方法 这是一篇有关<统计学习基础>,原书名The Elements of Statistical Learning的学习笔记,该书学习难度较高,有很棒的学者将其翻译成中文并放 ...

  8. 回归,岭回归。LASSO回归

    矩阵表示多元线性回归 Y=BX+a Q(B)=(Y-BX)T(Y-BX)达到最小时的B值. 也即是残差平方和最小时.B(Bi)的值.可以证明B的最小二乘估计=(XTX)-1XTy 其中(XTX)-1为 ...

  9. 【机器学习】岭回归和LASSO回归详解以及相关计算实例-加利福尼亚的房价数据集、红酒数据集

    文章目录 一,岭回归和LASSO回归 1.1 多重共线性 1.2 岭回归接手 1.3 线性回归的漏洞(线性系数的矛盾解释) 1.4 Ridge Regression 1.5 岭回归实例(加利福尼亚的房 ...

最新文章

  1. 爬虫9-淘宝商品信息定向爬虫
  2. php进程状态进度,PHP监控进程状态,完成掉线自动重启
  3. 计算机应用基础是文管二级吗,计算机应用基础(文管二级)习题册.doc
  4. 乒乓球比赛 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比 请编程序找出三队赛手的名单。
  5. Android下OpenSLES播放PCM音频文件
  6. 工作失误:没有分析进程消耗了这么多内存的原因
  7. 传智播客Java实现键盘数据的录入和if
  8. 小程序源代码_如何找回微信小程序源代码
  9. 数字电子技术基础(五):编码器
  10. 中国各省级行政区公共数据开放平台网址(2021.11.1更新)
  11. 手机更新显示itunes store无法连接服务器,iPhone无法连接App Store、iTunes Store?解决方法有哪些?...
  12. 怎么把苹果手机通讯录导入华为手机_怎么恢复手机通讯录?最完整手机通讯录恢复方法大公开...
  13. matlab时间坐标,[Matlab]以时间为横坐标作图
  14. Python连接维特智能角度传感器JY61/JY901的方法
  15. 真心话大冒险经典问题
  16. h5在线制作html5,在线制作HTML5多媒体作品的技巧
  17. java 缘起_小豹子带你看源码:Java 线程池(一)缘起 计划
  18. j计算机基础知识,计算机办公自动化教程Office2003
  19. ENVI数据文件打开
  20. 刘涛最新封面照曝光,网友称“风格百变这很刘涛”

热门文章

  1. 立足用户使用场景,BoCloud博云服务治理平台发布增强版
  2. 面向交易的日内高频量化交易平台笔记
  3. php MD5加密解密
  4. 旋转不变性与旋转等变性
  5. Android 10以上,保存视频通知到相册
  6. 生产者消费者模式+代码实现
  7. GDB commands
  8. Android Studio 实战演练—小猴子摘桃
  9. keepalived+nginx/mysql双主
  10. 启用新款iMac 2021 的彩色Hello屏幕保护程序!!