ML-线性模型 泛化优化 之 L1 L2 正则化
认识 L1, L2
从效果上来看, 正则化通过, 对ML的算法的任意修改, 达到减少泛化错误, 但不减少训练误差的方式的统称
训练误差
这个就损失函数什么的, 很好理解.
泛化错误
假设 我们知道 预测值 和 真实值 之前的 "误差" , 这就是泛化错误
- 跟训练数据没关系, 就是在用模型预测的时候, 给预测值 "加" 是一个项来修正模型
类似于 给 模型的预测值, 加上了一个 "修正项"
损失函数 = Loss + 正则化项
举个线性回归的栗子
L1: 损失函数 = \(J(\beta) = ||X \beta -y||^2 +||\beta||_1\)
L2: 损失函数 = \(J(\beta) = ||X \beta -y||^2 +||\beta||_2\)
即通过在等式中, 添加正则化项, 来抑制模型中的系数防止过拟合, 正则化的假设是,较小的权重对应更简单的模型.
一般化: 通常是通过范数 来定义正则化项的:
\(J(w) = L(w) + ||w||_p\)
范数 (Norm) 是一种定义向量(矩阵) 大小的方法. (\(矩阵_{mn} \rightarrow R\) 的某映射), 关于定义性质之类的暂时不细整了, 用到再说.
\(||x||_p = (\sum \limits _{i=1} ^n|x_i|^p)^{\frac {1}{p}}\)
- p1 Norm: 就是对向量各分量元素求和, 即: \(|x1| + |x_2| + ...|x_n|\)
- p2 Norm: 就是欧氏距离, 即: \(\sqrt {(x_1^2 + x_2^2 +...x_n^2)}\)
是如何其作用的? 又举个L1栗子.
假设参数只有两个 \(w=(w_1, w_2), 且有约束 ||w||_1 = 1\)
只两个元素w1, w2, 是为了在二维下可以画个图表示一波
即: \(|w_1| +| w_2| = 1, 即 w_2 = 1-|w_1|\) , 在2维坐标下,不就是个以(0,0)为中心, 边长为1的正方形旋转45度嘛. 四个顶点分别为(1,0), (0,1), (-1,0), (0,-1)
显然最低点在(0,0), 要到达这个点, 也要是该函数的负梯度, 或者称梯度下降.
\(-\nabla_w \ L_1(w) = sign(w)\) 就是看正负号.
再来举个L2的栗子,条件约束为 \(||w||_2 = 1\)
即 \(w_1^2 + w_2^2 = 1\) 极值也是负梯度方向 可很快找到, 画出来就是一个单位圆,圆心是(0,0), 半径为1
\(-\nabla_w \ L_2(w) = -w\)
在任何一点的负梯度,也是朝向圆心的呀.
总结一波, 对于加了正则化项: \(cost = J(w) + ||w||_p\) 而言, 总体最小, 即每项都要最小, 即向负梯度方向运动. 则 \(J(w)\) , \(||w||_p\) 达到最小, 即 二者的等值线,都朝各自负梯度方向运动, 相当于是原来是一力量, 现在是两个力量. 从数量上来说, 加了 正则项后, 求解出来的 w 变小了(各分量值), 如:
\(y = w_1x_1 + w_2 x_2\)
- 当 w1, w2= 0的时候, 不论 x 如何变,都不影响 y
- 当 w1, w2 非常大, x 变化一点点, y 会有很大变动
- 当 w1, w2 比较小, x 变化一点点, y 受影响也不大
L1 正则 特点
可以将一些权值缩小到0, 很稀疏
不容易计算, 在零点连续但不可导,需要分段求导
执行隐式变量选择.意味着一些特征对结果影响等于0, 类似于删除特征
- 预测因子对应较大的权值, 而其余的为零
对于其提供稀疏的解决方案, 应用于特征很多的场景, 忽略了很多 0 权值的特征, 计算复杂降低, 感觉比PCA还稳,因为它是线性组合, 而非直接干掉.
后来也取名为: Lasso 回归
L1 对异常值有较好的抵抗力
case1: L1 线性回归
\(min \ \sum \limits _{i=1}^n (y_i - \sum_{j=1}^p X_{ij} \beta_j)^2 + \lambda \sum \limits _{j=1}^p |\beta_j|\)
看作两股力量 \(min = A + B\)
- 原来只是 A 最小即可, 而现在是 A + B 最小, 相当于改变了解集
- 入 如果很大, 则 B 占主导了, 那么模型也就没呀影响, 代表了强度
L2 正则 特点
- 将一些权重特征缩小, 接近0, 而非 L1 直接为0
- 容易计算, 可导, 适合基于梯度下降法. 不过特征数很大也难算
- 会保留相关特征, 其权值的分布取决于相关性
L2 对异常值非常敏感
- 相对于L1 , 会更加精确一点
后来取名为 Ridge 回归
case1: L1 线性回归
\(min \ \sum \limits _{i=1}^n (y_i - \sum_{j=1}^p X_{ij} \beta_j)^2 + \lambda \sum \limits _{j=1}^p \beta_j^2\)
会使得参数值比较小, 但不至于像L1, 参数为0.
L1, L2 各有各好处, 如果结合起来用就变成了Elastic Net. 大致类似这样:
\(min \ \sum \limits _{i=1}^n (y_i - \sum_{j=1}^p X_{ij} \beta_j)^2 + \lambda_1 \sum \limits _{j=1}^p |\beta_j|\lambda_2 \sum \limits _{j=1}^p \beta_j^2\)
但这样的话, 计算的复杂度和调参将变成一门艺术, 嗯, 大概就是, 用意念, 艺术性地调参.
应用-Lasso, Ridge, Elastic
其实就分别对应加了 L1, L2, (L1+L2) 的正则函数.
Lasso 回归
\(Lasso \ \sum \limits _{i=1}^n (y_i - \sum_{j=1}^p X_{ij} \beta_j)^2 + \lambda \sum \limits _{j=1}^p |\beta_j| = ||y-X\beta||^2 + \lambda||\beta||_1\)
Ridege
\(Ridge \ ||y-X \beta||^2 + \lambda ||\beta||^2\)
此时求解:
\(\beta_{ridge} = (X'X + \lambda I)^{-1} X'y\)
L2 求解出就比不加多个 入 项
X' 表示 X 转置 和 ^T 是一样的
如果 \(\lambda\) 特别小, 相当于又回退到了 不加L2
如果 \(\lambda\) 特别大, 总体又要最小, 对 \(||\beta||^2\) 而言, \(\beta\) 要很小, 也就是说, 模型参数没啥用了.
Lasso vs Ridge
Lasso (L1正则) 能将一些系数设置为0, 执行变量选择, 而 Ridge (L2正则) 只是弱化系数
如果存在少量重要参数而其余影响小时, L1 , 如果先验认为多个同等重要的特征, 用L2比较好.
- 没有谁比谁好, 还是看先验(经验) 还有试验. 在现实世界我们并不知道真实参数值, 交叉验证 不断调参就选择最好就行啦
- 都能处理多重共线问题(样本矩阵不满秩
- L1 (lasso): 相关特征具有较大系数, 其余几乎是0
- L2 (ridge): 相关特征系数相近
Elastic Net
就结合了 L1, L2
小结一波
- 痛点: 线性模型通常有异常值或共线情况使参数估计有较大方差, 导致过拟合等, 模型不可靠
- 解决: 加入正则项, 即找到良好的偏差bias - 方差variance, 来模型的总误差
- 流行的有3种正则化技术
- L1 正则: 又称 Lasso 回归, (参数1范数)项, 突出重点, 其余为零,变量选择
- L2 正则: 又称 Ridge 回归, (参数2范数)项, 降低模型参数权值
- Elastic Net: 综合 L1+L2
- 实践中, 可通过 交叉验证的方式来不多调参, 找到最好组合, 做个自信而快乐的调参侠
ML-线性模型 泛化优化 之 L1 L2 正则化的更多相关文章
- 防止过拟合:L1/L2正则化
正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合).其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在tr ...
- 机器学习中L1,L2正则化项
搞过机器学习的同学都知道,L1正则就是绝对值的方式,而L2正则是平方和的形式.L1能产生稀疏的特征,这对大规模的机器学习灰常灰常重要.但是L1的求解过程,实在是太过蛋疼.所以即使L1能产生稀疏特征,不 ...
- L0,L1,L2正则化浅析
在机器学习的概念中,我们经常听到L0,L1,L2正则化,本文对这几种正则化做简单总结. 1.概念 L0正则化的值是模型参数中非零参数的个数. L1正则化表示各个参数绝对值之和. L2正则化标识各个参数 ...
- L1,L2正则化代码
# L1正则 import numpy as np from sklearn.linear_model import Lasso from sklearn.linear_model import SG ...
- L1和L2正则化(转载)
[深度学习]L1正则化和L2正则化 在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况 ...
- TensorFlow之DNN(三):神经网络的正则化方法(Dropout、L2正则化、早停和数据增强)
这一篇博客整理用TensorFlow实现神经网络正则化的内容. 深层神经网络往往具有数十万乃至数百万的参数,可以进行非常复杂的特征变换,具有强大的学习能力,因此容易在训练集上过拟合.缓解神经网络的过拟 ...
- Spark2.0机器学习系列之12: 线性回归及L1、L2正则化区别与稀疏解
概述 线性回归拟合一个因变量与一个自变量之间的线性关系y=f(x). Spark中实现了: (1)普通最小二乘法 (2)岭回归(L2正规化) (3)La ...
- 【深度学习】L1正则化和L2正则化
在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况.正则化是机器学习中通过显式的控制模 ...
- 机器学习之正则化【L1 & L2】
前言 L1.L2在机器学习方向有两种含义:一是L1范数.L2范数的损失函数,二是L1.L2正则化 L1范数.L2范数损失函数 L1范数损失函数: L2范数损失函数: L1.L2分别对应损失函数中的绝对 ...
随机推荐
- yii2 Query Builder 查询打印sql语句
$query = new Query(); $query->select('gs.*, g.goods_images, sa.attr_name, sa.is_default, sa.alias ...
- 网络协议 16 - DNS 协议
为什么在地址栏输入域名,就能直接访问到对应服务器?全局负载均衡和内部负载均衡又是什么?这些都和 DNS 解析息息相关,让我们一起来解密 DNS 解析. 其实说起 DNS 解析,应该都知道它很像 ...
- luoguP2173 [ZJOI2012]网络 LCT
链接 luogu 思路 颜色很少,开10个lct分别维护 if (Hash.count(make_pair(u, v)) && Hash[make_pair(u, v)] == col ...
- Elasticsearch的null values
很多时候,我们需要面临null值的烦扰,查询es时传入null值是要查询出null的数据还是不查这个field呢,稍有不慎就会引发新的bug,这的确是个问题! null_value 意味着无法索引或搜 ...
- 常见网页编辑器(富文本,Markdown,代码编辑等)
编辑器:网页不常用的功能,但却又是不可少的功能,如果要造个编辑器轮子,它可以把人玩死!!前端几大禁忌就有富文本, 为什么都说富文本编辑器是天坑? 下面记录一下常见的一些编辑器,该文随时更新: 富文本编 ...
- 记遇到的Release和Debug下有些不同
平常开发用Debug,但是发布的时候用Release,应该是很多单位都会用的,但是有的时候你发现Debug下好使,Release下不好使,这就遇到坑了. 我也是这两天连续遇到了两次,在此记录一下,如果 ...
- svn在cleanup 时,提示privious operation has not finished,解决方案
在updated代码时,svn 提示 上一次操作失败,需要cleanup. 执行cleanup时,提示:cleanup失败,因为上一次操作失败,请先执行cleanup.很幽默的提示. svn的“.sv ...
- Spring JdbcTemplate使用别名传参(NamedParameterJdbcTemplate)
原文地址http://www.voidcn.com/article/p-cwqegtpg-hx.html 在使用JdbcTemplate时,一般传参都是用的?来绑定参数,但是对于某种情况就不适用了,例 ...
- C中关键字inline用法
一.什么是内联函数 在C语言中,如果一些函数被频繁的调用,不断地用函数入栈,即函数栈,则会造成栈空间或者栈内存的大量消耗,为了解决这个问题,特别的引入了inline关键字,表示为内联函数.栈空间指的是 ...
- LocalDateTime代替Date
为什么需要LocalDate.LocalTime.LocalDateTime Date如果不格式化,打印出的日期可读性差 Tue Sep 10 09:34:04 CST 2019 使用SimpleDa ...