机器学习中的正则化问题(1)——概念

摘要:
提到了L1和L2作为损失函数和正则化的几个特征。L1或L2是否被选择作为损失函数受到关注。这是一个正则化函数(Omega(w)),这意味着剩余的90个系数在预测目标值的过程中不起作用,而L2不生成稀疏系数。最终可能会获得多个L1值,而L2只能获得一个值。事实上,拉普拉斯先验被添加到回归方程的系数中。L1规范公式适用于相对稀疏的数据。因为L2可以产生较小的预测误差率。

一般来说,监督学习就是最小化下面函数:

[w^* = argmin_w sum_iL(y_i,;f(x_i;w)) + lambdaOmega(w) ]

对于第一部分——Loss函数,一般有如下几种情况:

  • 如果是Square loss,那就是最小二乘了;
  • 如果是Hinge Loss,那就是著名的SVM了;
  • 如果是exp-Loss,那就是牛逼的 Boosting了;
  • 如果是log-Loss,那就是Logistic Regression了;

除以上几种,还有不同的loss函数,具有不同的拟合特性,这个得就具体问题具体分析[1]。

  在[2]中,提到了L1和L2作为损失函数和用于规则化的几个特点,其中L1的形式是:

[S = sum_{i=1}^nleft|y_i-f(x_i) ight| ]

L2的形式是:

[S = sum_{i=1}^nleft(y_i-f(x_i) ight)^2 ]

  作为损失函数,L2对离群点更加敏感,但从另外一方面,数据集中某个数据的微小改变,反映到拟合曲线上,L1比L2的变化幅度要大,也就是L2比L1更加稳定
  关于损失函数是选择L1还是L2,pdf文档[5]可以作为参考,在这篇文档中使用了gradient boosting regressor作为回归模型。

  优化目标的后一部分,是规则化函数(Omega(w)),其用于约束我们的模型,使其尽量简单,其目的用于防止过拟合,下面提一下L1和L2作为规范化项时候的一些区别。
L1的形式是:

[{f w}^* = argmin_{f w} sum_jleft(t({f x}_j)-sum_iw_ih_i({f x}_j) ight)^2 + lambdasum_{i=1}^k|{f w}_i| ]

L2的形式是:

[{f w}^* = argmin_{f w} sum_jleft(t({f x}_j)-sum_iw_ih_i({f x}_j) ight)^2 + lambdasum_{i=1}^k{f w}_i^2 ]

  相比较来说,L1具有内置的特征选择能力,但L2没有。其原因在于L1更倾向于产生稀疏的系数,打个比方来说,我们的回归函数具有100个系数,使用L1可能会产生10个非零系数,这也就是说其余90个系数在预测目标值的过程中没有发挥作用,而L2则不会产生稀疏系数,因而不具备特征选择能力。
  此外,最后求得的L1数值可能有多个,而L2的话只可能得到一个数值,其原因在于

![正则化1](http://ogex32jwc.bkt.clouddn.com/%E6%AD%A3%E5%88%99%E5%8C%961.png)
在这张图中,L2是绿色线条,其余线条都是L1的线条,由于L2只有一条,所以只有一个解(这些解释出自[2],想弄明白其中的"禅机"还需要更多动手尝试)   最后,==L1不具备解析解而L2具有,因而L2的计算更为高效==;但另一方面,L1的解具有稀疏性质,因而可以使用稀疏算法求解,从而从另一方面获得更好的计算效率。      **从另一个角度来讲,对损失函数进行正则化,实际上是在贝叶斯统计学派思想指导下的数据分析,其将先验期望和对观测数据进行拟合融合到一起,对于L1规则项来说,实际是对回归方程的系数添加了一个拉普拉斯先验,之后运行MAP,而对L2规则项来说,对回归方程添加了高斯先验,之后运行MAP**。高斯分布密度函数曲线和拉普拉斯分布密度函数曲线如下:
![正则化2](http://ogex32jwc.bkt.clouddn.com/%E6%AD%A3%E5%88%99%E5%8C%962.png)

  由上图可见,随着系数取值偏离0,取到这些系数的概率会降低,L1规范式对较大值和较小值兼容性较强(出自[5]的第一个回答)。从第三个回答中也能看出一些很有意思的内容,L1规范式适合于比较稀疏的数据,但如果在L1,L2都能用的情况下,L2更合适一些,因为L2能够产生更小的预测错误率。

[1] 机器学习中的范数规则化之(一)L0、L1与L2范数
[2] Differences between L1 and L2 as Loss Function and Regularization
[3] Differences between the L1-norm and the L2-norm (Least Absolute Deviations and Least Squares)
[4] L1 vs. L2 Loss function
[5] What is the difference between L1 and L2 regularization?

免责声明:文章转载自《机器学习中的正则化问题(1)——概念》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇React中最基础的jsx语法iOS开发拓展篇—蓝牙之CoreBlueTooth(BLE)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深度学习之Batch归一化

前言            以下内容是个人学习之后的感悟,转载请注明出处~ Batch归一化   在神经网络中,我们常常会遇到梯度消失的情况,比如下图中的sigmod激活函数,当离零点很远时,梯度基本为0。为了 解决这个问题,我们可以采用Batch归一化。                                                 ...

算法中的渐进记号

前言 在学习计算机算法时,知道插入排序的时间复杂度是O(n2),那O记号到底是什么意思呢?本文主要介绍几个算法分析时用到的记号。 大O记号 定义:O(g(n)) = { f(n) : 存在正常数c和n0 ,使对所有的n >= n0,都有 0 <= f(n) <= cg(n) }。大O记号给出函数的渐进上界。 , 则可以表示为 f(n) =...

AOP+自定义注解实现全局参数校验

AOP+自定义注解实现全局参数校验 在开发过程中,用户传递的数据不一定合法,虽然可以通过前端进行一些校验,但是为了确保程序的安全性,保证数据的合法,在后台进行数据校验也是十分必要的。 后台的参数校验 在controller方法中校验: 后台的参数是通过controller方法获取的,所以最简单的参数校验的方法,就是在controller方法中进行参数校验。...

Linux线程属性总结

线程属性标识符:pthread_attr_t 包含在 pthread.h 头文件中。 [c] view plaincopy  //线程属性结构如下:   typedef struct   {       int                   etachstate;      //线程的分离状态       int              ...

实战优化丨如何借助 CODING 实现云开发中的云函数的自动化部署

云开发中的云函数是云开发 Cloudbase 的一个重要的功能,开发者可以借助其中的云函数来实现一些复杂的业务逻辑,来实现诸如图片处理、数据处理等复杂的逻辑。同时,云函数的免运维、快速部署等特性也可以大大简化开发者的工作量,让开发者把更多的精力投放在业务逻辑的开发上。 在进行云开发中云函数的开发时,我们可能会经常重复“编写函数代码->部署”这个过程,...

[Go] 在golang中使用正则表达式捕获子表达式

正则匹配并且可以捕获到()这个里面的子表达式的值,linux的grep命令没办法捕获子表达式的值,只能获取到整条正则匹配的内容 package main import "regexp" import "fmt" func main() { str := `(.*?)(d+)(.*?)d(.*)d` r := regex...