XGBoost 主要结合了大量的回归树和一个小的学习率。在这种情况下,早期添加的树是重要的,而晚期添加的树是不重要的。
Vinayak 和 Gilad-Bachrach 提出了一种将深度神经网络社区的 dropout 技术应用于梯度提升树的新方法,并在某些情况下报告了更好的结果。
以下是新的树增强器 dart 的说明。
原始论文
Rashmi Korlakai Vinayak, Ran Gilad-Bachrach。“DART: Dropouts meet Multiple Additive Regression Trees.” [arXiv]。
特性
- 通过删除树来解决过拟合问题。
- 可以阻止不重要的普通树(以纠正普通错误)
由于训练中引入的随机性,可以期待以下一些差异:
- 由于随机丢弃dropout会阻止使用预测缓冲区,因此训练可能比
gbtree
慢 - 由于随机性,早停Early-stop可能不稳定
工作原理
- 在第
训练轮次中,假设
棵树被选中丢弃。
- 令
为被丢弃树的叶节点分数,
为新树的叶节点分数。
- 目标函数如下:
和
是超调,因此使用缩放因子
参数
Booster dart
继承自 gbtree
booster,因此支持 gbtree
的所有参数,比如 eta
、gamma
、max_depth
等。
以下是额外的参数:
sample_type
:采样算法的类型。uniform
:(默认)以均匀方式选择要删除的树。weighted
:以权重比例选择要删除的树。
normalize_type
:规范化算法的类型。- tree:(默认)新树的权重与每个被删除的树相同。
- forest:新树的权重等于被删除的树的权重之和(森林)。
- dropout_rate: 丢弃率。
- 范围:[0.0, 1.0]
- skip_dropout: 跳过丢弃的概率。
- 如果跳过了dropout,新树将以与 gbtree 相同的方式添加。
- 范围:[0.0, 1.0]
示例
代码语言:javascript复制import xgboost as xgb
# read in data
dtrain = xgb.DMatrix('./xgboost/demo/data/agaricus.txt.train?format=libsvm')
dtest = xgb.DMatrix('./xgboost/demo/data/agaricus.txt.test?format=libsvm')
# specify parameters via map
param = {'booster': 'dart',
'max_depth': 5, 'learning_rate': 0.1,
'objective': 'binary:logistic',
'sample_type': 'uniform',
'normalize_type': 'tree',
'rate_drop': 0.1,
'skip_drop': 0.5}
num_round = 50
bst = xgb.train(param, dtrain, num_round)
preds = bst.predict(dtest)
参考
- https://xgboost.readthedocs.io/en/latest/tutorials/dart.html
- https://arxiv.org/abs/1505.01866