自己总结概括
在机器学习中, 正则化的作用是防止模型的过拟合, 控制模型的复杂度.
什么是过拟合?模型在训练数据上效果很好,但是在没有见过的验证集或者测试集上效果不好, 因为模型死记硬背了训练数据, 并没有学到数据中的真正的规律, 不会举一反三.
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正则化主要有两个层面的作用:
-
控制叶子节点的权重:
- XGBoost的每个叶子节点上都有一个分数(或叫权重)。一个过于复杂的树可能会有一些叶子节点的分数特别大(绝对值),这意味着模型对某些样本的预测非常“自信”或极端,这通常是过拟合的迹象。
- 加入L1或L2正则化后,如果某个叶子节点的权重
w过大,那么|w|或w²就会很大,从而导致整个目标函数的值变大。模型在训练过程中以最小化目标函数为目标,因此它会倾向于学习那些不仅预测误差小,而且叶子节点权重也比较温和的树。
-
作为一种“剪枝”的辅助手段:
- L1正则化由于其稀疏性的特点,可能会直接将某些叶子节点的权重惩罚至0。这意味着这个叶子节点对应的规则可能被完全丢弃,相当于一种更
激进的剪枝。 - L2正则化则是一种更温和的约束,它让所有叶子的权重都均匀地变小,避免模型依赖某个特定的极端规则。
- L1正则化由于其稀疏性的特点,可能会直接将某些叶子节点的权重惩罚至0。这意味着这个叶子节点对应的规则可能被完全丢弃,相当于一种更
简单比喻:
- 想象你在学习(训练模型)。如果不加正则化,你可能会把课本上的每一句话(包括印刷错误)都背下来(过拟合)。
- L2正则化就像老师告诉你:“把握核心思想,细节不用记得那么精确。” 你依然会记住所有知识点,但不会对每个细节都钻牛角尖。
- L1正则化则像老师直接划重点:“这几章不考,不用看了。” 你直接忽略了一些不重要的内容,使你的知识体系更精炼。
3. 在什么情况下需要加上正则化?
你通常应该在以下情况下考虑使用或加强正则化:
-
观察到过拟合的迹象时:
- 训练集准确率很高,但验证集/测试集准确率明显偏低。
- 训练误差和验证误差之间的差距随着迭代轮数增加而越来越大。
-
数据集特征非常多,但样本量相对不足时:L1
- 这种情况下,模型非常容易捕捉到噪声而不是真实信号。正则化可以帮助模型关注更重要的特征。
-
希望进行特征选择时:L1
- 如果你想了解哪些特征更重要,可以尝试使用L1正则化。因为它会将不重要的特征对应的权重惩罚到0,从而实现一种隐式的特征选择。
-
当你怀疑存在多重共线性时: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 正则化 |
|---|---|---|
| 别名 | Lasso | Ridge |
| 惩罚项 | 绝对值之和 | 平方值之和 |
| 作用效果 | 稀疏化,使不重要特征权重为0 | 收缩,使所有权重均匀变小 |
| 在XGBoost中 | 更激进的正则化,可能直接丢弃某些规则 | 更温和的正则化,平滑预测结果 |
| 适用场景 | 严重过拟合、需要特征选择 | 一般性过拟合、存在特征共线性 |
| XGBoost参数 | reg_alpha | reg_lambda |
总而言之,L1和L2正则化是控制XGBoost模型复杂度和防止过拟合的强大工具。在大多数情况下,适当调整 reg_lambda L2就能带来显著的性能提升。当问题需要更极端的简化时,再考虑引入 reg_alphaL1。