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 的稳定性.

目录
相关文章
|
4月前
常用正则表达式 (必备)
常用正则表达式 (必备)
|
3月前
|
XML 数据格式
正则表达式3
正则表达式
|
JavaScript 数据安全/隐私保护
|
数据安全/隐私保护
正则表达式_2
学习自编程胶囊课程。
100 1
正则表达式_2
第177天:常用正则表达式(最全)
常用正则表达式 1 2 /* 常用正则表达式大全!(例如:匹配中文、匹配html) 3 4 匹配中文字符的正则表达式: [u4e00-u9fa5] 5 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 6 匹配双字节字符(包括汉字在内):[^x0...
1115 0
最全面的常用正则表达式大全
就算懂正则的朋友,在遇到需要用正则校验数据时,也往往是在网上去找很久,结果找来的还是不很符合要求。 所以我最近把开发中常用的一些正则表达式整理了一下,在这里分享一下。给自己留个底,也给朋友们做个参考。
1131 0
|
JavaScript C# 前端开发