L1,L2正则

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_32502811/article/details/81132640 总体概述:L1L1L_1正则:L1=α∥ω∥1L1=α‖ω‖1L_1 = \alpha\lVert\omega\rVert_1,其中αα\alpha为惩罚系数,ωω\omega为线性模型的参数。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_32502811/article/details/81132640

总体概述:

L1L1正则:

  • L1=αω1L1=α‖ω‖1,其中αα为惩罚系数,ωω为线性模型的参数。表示权值的绝对值之和最小。使他变最小的趋势就是希望模型参数中为0的项多一些,即稀疏。

  • 提到L1,自然而然会想到为什么没有L0.其实是有的。L0表示的含义是参数中非零项的个数。他的趋势也是希望模型参数会尽可能多的为0.但是实际上我们常用的却是L1或者L2.原因在于:优化L0范数很难(NP难问题),L1范数优化起来相对容易,并且L1范数是L0的最优凸近似。

  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择.(一般应用于特征之间有关系,类似降维)

  • 使用L1正则化的线性模型叫Lasso回归

L2L2正则

  • 形式:L2=αω22L2=α‖ω‖22,表式所有参数平方和再开方。对他进行最小化,产生的趋势是使得参数尽量小,即模型更简单些,但是与L1的区别是,尽量小但是达不到0.所以L2正则也叫权值衰减(weights decay)。
  • 对常数项不进行惩罚,所以参数值也不能太小,容易使得常数项起主要作用而使模型发生欠拟合。
  • 使用L2正则的线性模型为ridge回归,求解方法用梯度下降就可以
  • L2的作用在于可以防止过拟合,提升模型的泛化能力。为什么?我的理解是L2正则使得模型参数非常小(但不为零),参数越小模型越简单(为啥越简单?我的理解是:假如参数很大,那么输入有特别小的变化的时候,计算出来的数都会有很大的变化,这就容易导致过拟合;如果每个参数都比较小,那么输入有一定的变化的时候,对输出的影响不是很大,泛化能力好),模型越简单越不容易过拟合。

加正则项相当于是对模型加先验,L1正则相当于拉普拉斯先验,L2正则相当于高斯先验

L1和L2的区别

L1和L2的正则化损失表示为如下:

Lasso:minω1nyωx2,s.t.i=1N|ωi|CLasso:minω1n‖y−ωx‖2,s.t.∑i=1N|ωi|≤C

Ridge:minω1nyωx2,s.t.ωi2CRidge:minω1n‖y−ωx‖2,s.t.‖ωi‖2≤C

对其进行可视化,假设是一个二维的模型,即只有ω1,ω2ω1,ω2两个参数。

image

我们可以在平面上画出目标函数的等高线,约束条件为平面中半径为C的norm ball(黑色线表示,左侧是L1正则,右侧是L2正则)。等高线和norm ball第一次相交的位置,就是最优解。

可以看出,L1-ball更容易在角的位置和等高线先相交,而角位置都是在轴上,所以肯定有一个为0,这也说明了为啥L1正则会产生稀疏性。L2-ball因为没有角,所以产生稀疏的情况就很少,所以它不具有稀疏性,而只是让参数更加的趋近于0.

因此,一句话总结就是:L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。

参考blog

L1+L2

把L1和L2合在一起,就变成了ElasticNet

argminωyωx+λ1ω1+λ2ω2arg⁡minω‖y−ωx‖+λ1‖ω‖1+λ2‖ω‖2

ElasticNet 是一种使用L1和L2先验作为正则化矩阵的线性回归模型.这种组合用于只有很少的权重非零的稀疏模型,比如:class:Lasso, 但是又能保持:class:Ridge 的正则化属性.我们可以使用 l1_ratio 参数来调节L1和L2的凸组合(一类特殊的线性组合)。

当多个特征和另一个特征相关的时候弹性网络非常有用。Lasso 倾向于随机选择其中一个,而弹性网络更倾向于选择两个.
在实践中,Lasso 和 Ridge 之间权衡的一个优势是它允许在循环过程(Under rotate)中继承 Ridge 的稳定性.

目录
相关文章
|
机器学习/深度学习 Web App开发 JavaScript
正则Regester
正则Regester
86 0
正则Regester
|
10月前
常用正则
常用正则
45 1
|
网络协议 JavaScript 前端开发
正则表达式、常用的正则
正则表达式、常用的正则
139 1
|
数据可视化 Linux
【常用正则大全】
【常用正则大全】
247 0
【常用正则大全】
|
新能源 Java 区块链
【常用正则大全】2
【常用正则大全】2
248 0
【常用正则大全】2
|
移动开发 前端开发 JavaScript
循序渐进,通过40个正则我终于入门了正则表达式
最近在阅读axios中的工具函数的源码,说实话学到了很多知识,只要看不懂的我就不断的查阅资料,进行自我校验、自我巩固和自我讲解,总之就是不断的将自己不懂的基础知识挖深学习。因为之前查看源码的一段时间,保证的只是能看懂源码的逻辑就算是不错了,学习的深度还不够,没有真正的抓住源码的思想精髓。
134 0
|
数据采集 人工智能 Go
正则处理
正则处理
71 0
|
存储 算法 JavaScript
字符串匹配类的问题,尝试正则
字符串匹配类的问题,尝试正则
94 0
|
数据采集 机器学习/深度学习 移动开发
我学会了,正则表达式
爬虫是**非常的**的强大,相信不少朋友都有所耳闻,它帮助我们更快地“获得”我们所要关键数据。那么,它怎么知道我们要需要什么内容?它又是如何工作的?在这篇文章里,我们一起来看看。
94 0
我学会了,正则表达式