XGBoost 主要结合了大量的回归树和一个小的学习率。在这种情况下,早期添加的树是重要的,而晚期添加的树是不重要的。
Vinayak 和 Gilad-Bachrach 提出了一种将深度神经网络社区的 dropout 技术应用于梯度提升树的新方法,并在某些情况下报告了更好的结果。
以下是新的树增强器 dart 的说明。
Rashmi Korlakai Vinayak, Ran Gilad-Bachrach。“DART: Dropouts meet Multiple Additive Regression Trees.” [arXiv]。
由于训练中引入的随机性,可以期待以下一些差异:
gbtree
慢训练轮次中,假设
棵树被选中丢弃。
为被丢弃树的叶节点分数,
为新树的叶节点分数。
和
是超调,因此使用缩放因子
Booster dart
继承自 gbtree
booster,因此支持 gbtree
的所有参数,比如 eta
、gamma
、max_depth
等。
以下是额外的参数:
sample_type
:采样算法的类型。uniform
:(默认)以均匀方式选择要删除的树。weighted
:以权重比例选择要删除的树。normalize_type
:规范化算法的类型。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)