[xgboost]xgboost中的L1和L2正则化

71 阅读6分钟

自己总结概括

在机器学习中, 正则化的作用是防止模型的过拟合, 控制模型的复杂度.

什么是过拟合?模型在训练数据上效果很好,但是在没有见过的验证集或者测试集上效果不好, 因为模型死记硬背了训练数据, 并没有学到数据中的真正的规律, 不会举一反三.

L1是更激进的措施, 一般用在严重的过拟合情况下.

L2是更加温和的措施,一般用在一般性过拟合的情况下.

如果用了L2之后, 还是存在过拟合的现象, 那么可以再加上L1.

有就是说, 一般先用L2,如何还是不能解决问题, 再用L1

这是一个非常核心的机器学习问题。我们来详细解释一下XGBoost中的L1和L2正则化。

首先,一个重要的概念纠正:它们通常被称为 “正则化”“正则项” ,而不是“正则表达式”。正则表达式是用于文本匹配的完全不同的概念。


1. 什么是L1和L2正则化?

在机器学习中,正则化的主要目的是防止模型过拟合。过拟合指的是模型在训练数据上表现非常好,但在未见过的测试数据上表现很差,即模型“死记硬背”了训练数据,而没有学到真正的通用规律

在XGBoost中,L1和L2正则化被直接加入到目标函数中,作为惩罚项,用来控制模型的复杂度。

  • 目标函数 = 损失函数 + 正则化项

假设我们的模型有多个参数(在XGBoost中,这些参数可以理解为叶子节点的权重分数 w),L1和L2正则化通过惩罚这些参数的大小来实现控制。

L1正则化(绝对值之和,让部分参数变成0, 比较激进, 倾向产生稀疏性)

  • 别称:Lasso 正则化
  • 计算方式:所有参数绝对值之和。
  • 数学公式λ * Σ|w_i| (其中 λ 是控制惩罚力度的超参数)
  • 特点:它倾向于产生稀疏解

L2正则化(平方值之和,让所有参数都变得很小,但是不是变成0, 所有惩罚力度相对温和)

  • 别称:Ridge 正则化 / 权重衰减
  • 计算方式:所有参数平方值之和。
  • 数学公式(1/2) * λ * Σ(w_i²) (这里的 1/2 是为了求导方便,实际效果由 λ 控制)
  • 特点:它倾向于让所有参数都变得很小,但不会直接变为0

2. 它们在XGBoost中起到什么作用?

在XGBoost中,L1和L2正则化主要有两个层面的作用:

  1. 控制叶子节点的权重

    • XGBoost的每个叶子节点上都有一个分数(或叫权重)。一个过于复杂的树可能会有一些叶子节点的分数特别大(绝对值),这意味着模型对某些样本的预测非常“自信”或极端,这通常是过拟合的迹象。
    • 加入L1或L2正则化后,如果某个叶子节点的权重 w 过大,那么 |w| 就会很大,从而导致整个目标函数的值变大。模型在训练过程中以最小化目标函数为目标,因此它会倾向于学习那些不仅预测误差小,而且叶子节点权重也比较温和的树。
  2. 作为一种“剪枝”的辅助手段

    • L1正则化由于其稀疏性的特点,可能会直接将某些叶子节点的权重惩罚至0。这意味着这个叶子节点对应的规则可能被完全丢弃,相当于一种更激进的剪枝。
    • L2正则化则是一种更温和的约束,它让所有叶子的权重都均匀地变小,避免模型依赖某个特定的极端规则。

简单比喻

  • 想象你在学习(训练模型)。如果不加正则化,你可能会把课本上的每一句话(包括印刷错误)都背下来(过拟合)。
  • L2正则化就像老师告诉你:“把握核心思想,细节不用记得那么精确。” 你依然会记住所有知识点,但不会对每个细节都钻牛角尖。
  • L1正则化则像老师直接划重点:“这几章不考,不用看了。” 你直接忽略了一些不重要的内容,使你的知识体系更精炼。

3. 在什么情况下需要加上正则化?

你通常应该在以下情况下考虑使用或加强正则化:

  1. 观察到过拟合的迹象时

    • 训练集准确率很高,但验证集/测试集准确率明显偏低
    • 训练误差和验证误差之间的差距随着迭代轮数增加而越来越大。
  2. 数据集特征非常多,但样本量相对不足时:L1

    • 这种情况下,模型非常容易捕捉到噪声而不是真实信号。正则化可以帮助模型关注更重要的特征。
  3. 希望进行特征选择时:L1

    • 如果你想了解哪些特征更重要,可以尝试使用L1正则化。因为它会将不重要的特征对应的权重惩罚到0,从而实现一种隐式的特征选择。
  4. 当你怀疑存在多重共线性时:L2

    • 即特征之间高度相关。L2正则化在这种情况下特别有效,它能让模型对相关特征的权重分配更加稳定和平滑,而不是让某个特征的权重变得异常大。

如何在XGBoost中设置?

在XGBoost的参数中:

  • reg_alpha:控制L1正则化的权重(即上面公式中的 λ)。默认值为0。
  • reg_lambda:控制L2正则化的权重(即上面公式中的 λ)。默认值为1。

一般调参建议

  • 从一个较小的值开始(如0.1, 1, 10),然后根据模型在验证集上的表现进行调整。
  • 通常,reg_lambda (L2) 的使用比 reg_alpha (L1) 更普遍,因为它更温和稳定。
  • 如果你发现模型依然过拟合,或者希望模型更稀疏,再尝试引入或增大 reg_alpha (L1)。
  • 你也可以同时使用两者,这被称为 Elastic Net

总结

特性L1 正则化L2 正则化
别名LassoRidge
惩罚项绝对值之和平方值之和
作用效果稀疏化,使不重要特征权重为0收缩,使所有权重均匀变小
在XGBoost中更激进的正则化,可能直接丢弃某些规则更温和的正则化,平滑预测结果
适用场景严重过拟合、需要特征选择一般性过拟合、存在特征共线性
XGBoost参数reg_alphareg_lambda

总而言之,L1和L2正则化是控制XGBoost模型复杂度和防止过拟合的强大工具。在大多数情况下,适当调整 reg_lambda L2就能带来显著的性能提升。当问题需要更极端的简化时,再考虑引入 reg_alphaL1。