当前位置: 首页 > news >正文

L1与L2正则化

写在最前:

这篇不是原创!想写一点发现也不比他的好,知乎专栏,@莫烦PYTHON。
这位大神还发布了视频来帮助解释。

尊重原创,我没有改动一个字。。。


过拟合

过拟合示意图

我们知道, 过拟合就是所谓的模型对可见的数据过度自信, 非常完美的拟合上了这些数据, 如果具备过拟合的能力, 那么这个方程就可能是一个比较复杂的非线性方程 , 正是因为这里的 x^3 和 x^2 使得这条虚线能够被弯来弯去, 所以整个模型就会特别努力地去学习作用在 x^3 和 x^2 上的 c d 参数. 但是我们期望模型要学到的却是 这条蓝色的曲线. 因为它能更有效地概括数据.而且只需要一个 y=a+bx 就能表达出数据的规律. 或者是说, 蓝色的线最开始时, 和红色线同样也有 c d 两个参数, 可是最终学出来时, c 和 d 都学成了0, 虽然蓝色方程的误差要比红色大, 但是概括起数据来还是蓝色好. 那我们如何保证能学出来这样的参数呢? 这就是 l1 l2 正则化出现的原因啦.

L1 L2 Regularization

L1 L2正则项示意图

对于刚刚的线条, 我们一般用这个方程来求得模型 y(x) 和 真实数据 y 的误差, 而 L1 L2 就只是在这个误差公式后面多加了一个东西, 让误差不仅仅取决于拟合数据拟合的好坏, 而且取决于像刚刚 c d 那些参数的值的大小. 如果是每个参数的平方, 那么我们称它为 L2正则化, 如果是每个参数的绝对值, 我们称为 L1 正则化. 那么它们是怎么样工作的呢?

核心思想

L1 L2正则化的核心

我们拿 L2正则化来探讨一下, 机器学习的过程是一个 通过修改参数 theta 来减小误差的过程, 可是在减小误差的时候非线性越强的参数, 比如在 x^3 旁边的 theta 4 就会被修改得越多, 因为如果使用非线性强的参数就能使方程更加曲折, 也就能更好的拟合上那些分布的数据点. Theta 4 说, 瞧我本事多大, 就让我来改变模型, 来拟合所有的数据吧, 可是它这种态度招到了误差方程的强烈反击, 误差方程就说: no no no no, 我们是一个团队, 虽然你厉害, 但也不能仅仅靠你一个人, 万一你错了, 我们整个团队的效率就突然降低了, 我得 hold 住那些在 team 里独出风头的人. 这就是整套正规化算法的核心思想. 那 L1, L2 正则化又有什么不同呢?

图像化

L1 L2 的图像化

想象现在只有两个参数 theta1 theta2 要学, 蓝色的圆心是误差最小的地方, 而每条蓝线上的误差都是一样的. 正则化的方程是在黄线上产生的额外误差(也能理解为惩罚度), 在黄圈上的额外误差也是一样. 所以在蓝线和黄线 交点上的点能让两个误差的合最小. 这就是 theta1 和 theta2 正则化后的解. 要提到另外一点是, 使用 L1 的方法, 我们很可能得到的结果是只有 theta1 的特征被保留, 所以很多人也用 l1 正则化来挑选对结果贡献最大的重要特征. 但是 l1 的结并不是稳定的. 比如用批数据训练, 每次批数据都会有稍稍不同的误差曲线,如下所示:

不同数据的误差曲线

L2 针对于这种变动, 白点的移动不会太大, 而 L1的白点则可能跳到许多不同的地方 , 因为这些地方的总误差都是差不多的. 侧面说明了 L1 解的不稳定性

统一表达形式

最后,为了控制这种正规化的强度, 我们会加上一个参数 lambda, 并且通过 交叉验证 cross validation 来选择比较好的 lambda. 这时, 为了统一化这类型的正则化方法, 我们还会使用 p 来代表对参数的正则化程度. 这就是这一系列正则化方法的最终的表达形式啦.

L1 L2正则化最终表达形式

相关文章:

  • centos7配置postfix dovecot cyrus-sasl foxmail
  • python利用openpyxl库操作Excel来读取、修改、写入测试数据
  • nginx添加几十个域名
  • ffmpeg获取视频封面图片
  • 源码包安装 以及升级内核 上课内容
  • 实现 el-table 拖拽行排序,并获取当前拖拽行的数据传入服务器
  • js的面向对象编程
  • GitLab在centos7上安装和使用
  • 外行人都能看得懂的机器学习,错过了血亏!
  • 合并两个DataSet的一种方法
  • springboot集成swagger
  • kentico中的page template的使用
  • 解决奇葩的win7文件不能拖动问题
  • layer
  • RSA加密算法的简单案例
  • Java-详解HashMap
  • mysql 数据库四种事务隔离级别
  • Nodejs和JavaWeb协助开发
  • php中curl和soap方式请求服务超时问题
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • springMvc学习笔记(2)
  • unity如何实现一个固定宽度的orthagraphic相机
  • 浮现式设计
  • 高度不固定时垂直居中
  • 简单实现一个textarea自适应高度
  • 将回调地狱按在地上摩擦的Promise
  • 聊聊flink的BlobWriter
  • 使用docker-compose进行多节点部署
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Nginx实现动静分离
  • #Linux(Source Insight安装及工程建立)
  • #大学#套接字
  • (java)关于Thread的挂起和恢复
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (Python第六天)文件处理
  • (二)hibernate配置管理
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (转)Windows2003安全设置/维护
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .dwp和.webpart的区别
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET 设计模式初探
  • .NET与 java通用的3DES加密解密方法
  • .Net中的设计模式——Factory Method模式
  • .net专家(张羿专栏)
  • .Net组件程序设计之线程、并发管理(一)
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [383] 赎金信 js
  • [BUUCTF 2018]Online Tool(特详解)
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
  • [BZOJ3223]文艺平衡树