XGBoost防止过拟合的方法

1 概述

以下是一些从理论研究和实践经验中总结的防止过拟合的思路:
思路一:控制模型的复杂度
主要方法:

限制树的最大深度
调节正则项系数
限制叶子节点样本数量

思路二:增加随机性使得模型对噪声鲁棒
主要方法:

控制随机采样比例
调节学习率

思路三:通过监控loss防止过拟合发生
主要方法:

EarlyStopping

思路四:缓解样本不均衡问题
主要方法:

SMOTE上采样(适用于分类问题)

以下是这些方法的详细介绍。

2 具体方法

2.1 控制模型的复杂度

2.1.1 限制树的最大深度

参数名称:max_depth
我们常用3-10之间的数字。这个值为树的最大深度。这个值是用来控制过拟合的。max_depth越大,模型学习的更加具体。设置为0代表没有限制,范围: [0,∞]

2.1.2 调节正则项系数

参数名称:gamma
gamma()就是正则化项控制叶子节点数量复杂度()的系数
在节点分裂时,只有分裂后损失函数的值下降了,才会分裂这个节点。gamma指定了节点分裂所需的最小损失函数下降值。 这个参数的值越大,算法越保守。因为gamma值越大的时候,损失函数下降更多才可以分裂节点。所以树生成的时候更不容易分裂节点。范围: [0,∞]
参数名称:alpha
权重的L1正则化项。(和Lasso regression类似)。 可以应用在很高维度的情况下,使得算法的速度更快。
参数名称:lambda
权重的L2正则化项。(和Ridge regression类似)。这个参数是用来控制XGBoost的正则化部分的。这个参数在减少过拟合上很有帮助。

2.1.3 限制叶子节点样本数量

参数名称:min_child_weight
决定最小叶子节点样本权重和,和GBM的 min_child_leaf 参数类似,但不完全一样。XGBoost的这个参数是最小样本权重的和,而GBM参数是最小样本总数。
这个参数用于避免过拟合。当它的值较大时,可以避免模型学习到局部的特殊样本。
但是如果这个值过高,会导致欠拟合。
这个参数需要使用CV来调整。

2.2 增加随机性使得模型对噪声鲁棒

2.2.1 控制随机采样比例

参数名称:subsample
和GBM中的subsample参数一模一样。这个参数控制对于每棵树,随机采样的比例。
减小这个参数的值,算法会更加保守,避免过拟合。但是,如果这个值设置得过小,它可能会导致欠拟合。
典型值:0.5-1.0。

2.2.2 调节学习率

参数名称:eta
和GBM中的 learning rate 参数类似。
通过减少每一步的权重,可以提高模型的鲁棒性。
典型值为0.01-0.2。

2.3 通过监控loss防止过拟合发生

2.3.1 EarlyStopping

XGBoost提供了在指定轮数完成后提前停止训练的功能。
除了提供用于评估每轮迭代中的评价指标和数据集之外,还需要指定一个阈值,如果连续多轮迭代中模型的效果没有提升,就停止训练。这是通过early_stopping_rounds参数来设置的。

2.4 缓解样本不均衡问题

2.4.1 SMOTE上采样(适用于分类问题)

SMOTE算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。
分类问题中,当样本不均衡问题出现时,模型对于数据量较少的类会存在过拟合,通过上采样提升占比较小的样本类的比例,可以在一定程度上降低模型的过拟合风险。

参考链接
XGBoost中如何防止过拟合
XGBoost 重要参数(调参使用)
机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)
过采样中用到的SMOTE算法

你可能感兴趣的:(机器学习,过拟合,机器学习,python)