线性模型 泛化优化 之 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
  • 实践中, 可通过 交叉验证的方式来不多调参, 找到最好组合, 做个自信而快乐的调参侠

原文地址:https://www.cnblogs.com/chenjieyouge/p/11974148.html

时间: 2024-07-29 16:23:20

线性模型 泛化优化 之 L1 L2 正则化的相关文章

【深度学习】L1正则化和L2正则化

在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况.正则化是机器学习中通过显式的控制模型复杂度来避免模型过拟合.确保泛化能力的一种有效方式.如果将模型原始的假设空间比作"天空",那么天空飞翔的"鸟"就是模型可能收敛到的一个个最优解.在施加了模型正则化后,就好比将原假设空间("天空")缩小到一定的空间范围("笼子")

机器学习之路: python线性回归 过拟合 L1与L2正则化

git:https://github.com/linyi0604/MachineLearning 正则化: 提高模型在未知数据上的泛化能力 避免参数过拟合正则化常用的方法: 在目标函数上增加对参数的惩罚项 削减某一参数对结果的影响力度 L1正则化:lasso 在线性回归的目标函数后面加上L1范数向量惩罚项. f = w * x^n + b + k * ||w||1 x为输入的样本特征 w为学习到的每个特征的参数 n为次数 b为偏置.截距 ||w||1 为 特征参数的L1范数,作为惩罚向量 k 为

L1 与 L2 正则化

参考这篇文章: https://baijiahao.baidu.com/s?id=1621054167310242353&wfr=spider&for=pc https://blog.csdn.net/jinping_shi/article/details/52433975 参考这篇文章: https://baijiahao.baidu.com/s?id=1621054167310242353&wfr=spider&for=pc https://blog.csdn.net/

L1与L2正则化

目录 过拟合 结构风险最小化原理 正则化 L2正则化 L1正则化 L1与L2正则化 参考链接 过拟合 机器学习中,如果参数过多.模型过于复杂,容易造成过拟合. 结构风险最小化原理 在经验风险最小化(训练误差最小化)的基础上,尽可能采用简单的模型,以提高模型泛化预测精度. 正则化 为了避免过拟合,最常用的一种方法是使用正则化,例如L1和L2正则化. 所谓的正则化,就是在原来损失函数的基础上,加了一些正则化项,或者叫做模型复杂度惩罚项. L2正则化 L2正则化即:\(L=E_{in}+\lambda

l1和l2正则化

https://blog.csdn.net/tianguiyuyu/article/details/80438630 以上是莫烦对L1和L2的理解 l2正则:权重的平方和,也就是一个圆 l1正则:权重的绝对值之和,等价与一个正方形. 图中,正则项和损失项的交点就是最优解的位置,我们可以看到,在只有2个参数的情况下,l1倾向使得某个参数直接为0:l2倾向使得某些参数逼近0 再看下吴恩达的理解 正则化的意义:在于让高阶的参数逼近0,使其对拟合函数的贡献变小:可以看到theta3和theta4,我们给

L1&L2 Regularization

正则化方法:防止过拟合,提高泛化能力 在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合).其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大--因为训练出来的网络过拟合了训练集,对训练集外的数据却不work. 为了防止overfitting,可以用的方法有很多,下文就将以此展开.有一个概念需要先说明,在机器学习算法中,我们常常将原始数据集分为三部分:t

正则化--L2正则化

请查看以下泛化曲线,该曲线显示的是训练集和验证集相对于训练迭代次数的损失. 图 1 显示的是某个模型的训练损失逐渐减少,但验证损失最终增加.换言之,该泛化曲线显示该模型与训练集中的数据过拟合.根据奥卡姆剃刀定律,或许我们可以通过降低复杂模型的复杂度来防止过拟合,这种原则称为正则化. 也就是说,并非只是以最小化损失(经验风险最小化)为目标: $$\text{minimize(Loss(Data|Model))}$$ 而是以最小化损失和复杂度为目标,这称为结构风险最小化: $$\text{minim

Kaldi中的L2正则化

steps/nnet3/train_dnn.py --l2-regularize-factor 影响模型参数的l2正则化强度的因子.要进行l2正则化,主要方法是在配置文件中使用'l2-regularize'进行配置.l2正则化因子将乘以组件中的l2正则化值,并且可用于通过模型平均化以校正与并行化带来的影响. (float,默认值= 1) src/nnet3/nnet-utils.cc:2030 void ApplyL2Regularization(const Nnet &nnet, BaseFl

TensorFlow L2正则化

TensorFlow L2正则化 L2正则化在机器学习和深度学习非常常用,在TensorFlow中使用L2正则化非常方便,仅需将下面的运算结果加到损失函数后面即可 reg = tf.contrib.layers.apply_regularization(tf.contrib.layers.l2_regularizer(1e-4), tf.trainable_variables())