前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XGB5:DART Booster树增强器

XGB5:DART Booster树增强器

作者头像
用户3578099
发布2024-05-27 21:19:31
630
发布2024-05-27 21:19:31
举报
文章被收录于专栏:AI科技时讯AI科技时讯

XGBoost 主要结合了大量的回归树和一个小的学习率。在这种情况下,早期添加的树是重要的,而晚期添加的树是不重要的。

Vinayak 和 Gilad-Bachrach 提出了一种将深度神经网络社区的 dropout 技术应用于梯度提升树的新方法,并在某些情况下报告了更好的结果

以下是新的树增强器 dart 的说明。

原始论文

Rashmi Korlakai Vinayak, Ran Gilad-Bachrach。“DART: Dropouts meet Multiple Additive Regression Trees.” [arXiv]。

特性

  • 通过删除树来解决过拟合问题。
    • 可以阻止不重要的普通树(以纠正普通错误)

由于训练中引入的随机性,可以期待以下一些差异:

  • 由于随机丢弃dropout会阻止使用预测缓冲区,因此训练可能比 gbtree
  • 由于随机性,早停Early-stop可能不稳定

工作原理

  • 在第
m

训练轮次中,假设

k

棵树被选中丢弃。

D = \sum_{i \in \mathbf{K}} F_i

为被丢弃树的叶节点分数,

F_m = \eta \tilde{F}_m

为新树的叶节点分数。

  • 目标函数如下:
\mathrm{Obj} = \sum_{j=1}^n L \left( y_j, \hat{y}_j^{m-1} - D_j + \tilde{F}_m \right)\Omega \left( \tilde{F}_m \right).
D

F_m

是超调,因此使用缩放因子

\hat{y}_j^m = \sum_{i \not\in \mathbf{K}} F_i + a \left( \sum_{i \in \mathbf{K}} F_i + b F_m \right) .

参数

Booster dart 继承自 gbtree booster,因此支持 gbtree 的所有参数,比如 etagammamax_depth 等。

以下是额外的参数:

  • sample_type:采样算法的类型。
    • uniform:(默认)以均匀方式选择要删除的树。
    • weighted:以权重比例选择要删除的树。
  • normalize_type:规范化算法的类型。
    • tree:(默认)新树的权重与每个被删除的树相同。
    \begin{split}a \left( \sum_{i \in \mathbf{K}} F_i + \frac{1}{k} F_m \right) &= a \left( \sum_{i \in \mathbf{K}} F_i + \frac{\eta}{k} \tilde{F}_m \right) \\ &\sim a \left( 1 + \frac{\eta}{k} \right) D \\ &= a \frac{k + \eta}{k} D = D , \\ &\quad a = \frac{k}{k + \eta}\end{split}
    • forest:新树的权重等于被删除的树的权重之和(森林)。
    \begin{split}a \left( \sum_{i \in \mathbf{K}} F_i + F_m \right) &= a \left( \sum_{i \in \mathbf{K}} F_i + \eta \tilde{F}_m \right) \\ &\sim a \left( 1 + \eta \right) D \\ &= a (1 + \eta) D = D , \\ &\quad a = \frac{1}{1 + \eta} .\end{split}
  • 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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技时讯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原始论文
  • 特性
  • 工作原理
  • 参数
  • 示例
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档