DART booster
XGBoost基本上都是组合大量小学习率的回归树。在这种情况,越晚添加的树比越早添加的树更重要。
Rasmi根据深度神经网络社区提出一个新的使用dropout的boosted trees,并且证明它在某些情况有更好的结果。
以下是新的tree boosterdart
的介绍。
原始文章
特征
- Drop Trees是为了解决过拟合
- 可以防止一些琐碎的树(为了纠正小错误)。
因为训练中引入了随机,所以有以下的不同:
- 可以防止一些琐碎的树(为了纠正小错误)。
- 因为随机dropout不使用用于保存预测结果的buffer所以训练会更慢
- 因为随机,早停可能不够稳定
DART算法怎么运行
DART算法和MART(GBDT)算法主要有两个不同点:
dropout
计算下一棵树要拟合的梯度的时候,仅仅随机从已经生成的树中选取一部分。假设经过nn次迭代之后当前模型为MM,M=∑ni=1TiM=\sum_{i=1}^nT_i,当中TiT_i是第ii次学习到的树。DART算法首先选择一个随机子集I⊂{1,...,n}I\subset{\{1,...,n\}},创建模型M^=∑i∈ITi\hat{M}=\sum_{i\in{I}}T_i。树TT从{(x,−L′x(M^(x)))}\{(x,-L_x'(\hat{M}(x)))\}学习得到,当中L′x()L_x'()表示求损失函数的梯度作为下一次的标签,GDBT中使用损失函数的梯度作为下一个树的输入标签。
归一化
DART和MART第二点不同就是DART添加一棵树时需要先归一化。归一化背后的原理是:树T是尝试减少M^\hat{M}和最优预测器之间的差距,dropped trees也是为了减少这个差距。因此引入new tree和dropped trees都是为了达到相同的目标。进一步说,假设通过II建立模型M^\hat{M}时drop掉k棵树。所以新的树TT大概是dropped trees中每一个独立的树的k倍。因此,DART算法将树TT乘以1/k1/k,这使TT的大小和每一个单独的dropped trees相同。然后,新的树和dropped trees都乘以k/(1+k)k/(1+k),再将新的树加入集成模型中。乘以k/(k+1)k/(k+1)是为了保证新的树的引入和不引入的效果一样。
XGBoost官方文档
- 在第m次训练,假设k棵树被dropped。
- 假设D=∑i∈KFiD = \sum_{i \in \mathbf{K}} F_i是dropped trees叶子节点的得分,Fm=ηF~mF_m = \eta \tilde{F}_m是新的树的叶子节点的得分,η\eta表示学习率
- 目标函数如下:
Obj=∑j=1nL(yj,y^m−1j−Dj+F~m)+Ω(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).
- DD和FmF_m有相同的目标,使用拉伸系数(scale factor):
y^mj=∑i∉KFi+a(∑i∈KFi+bFm).
\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
DART booster继承了gbtree
,所以dart
也有eta
.gamma
,max_depth
等参数,额外增加的参数如下
sample_type [default=”uniform”]
算法抽样的类型
* uniform
:(default)均匀选择树dropped。
* weighted
:按照权重来选择树dropped。
normalize_type [default=”tree”]
归一化算法的类型
* tree
:新的tree和每一个dropped trees有同样的权重
* 新的trees的权重为 1 / (k + learning_rate)
* dropped trees乘以一个系数 k / (k + learning_rate)
\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
:新的树和所有dropped trees的和有相同的权重
* 新的trees的权重为 1 / (1 + learning_rate)
* dropped trees乘以一个系数 1 / (1 + learning_rate)
\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}
rate_drop [default=0.0]
- dropout的概率(在生成的树中dropped一部分)
- 范围:[0.0, 1.0]
one_drop [default=0]
- 当这个被设置时,至少有一个树始终会被dropped(allows Binomial-plus-one or epsilon-dropout from the original DART paper)
skip_drop [default=0.0]
- 在boosting迭代的过程中略过dropout过程的概率
- 如果一次dropout被略过,新的树被添加进model用和gbtree一样的方式。
- 非0的skip_drop比rate_drop和one_drop有更高的优先级。
- 范围:[0.0,1.0][0.0,1.0]
DART booster相关推荐
- 《深度学习,统计学习,数学基础》人工智能算法工程师手册:程序员写的AI书,50 章一网打尽...
来源:专知 本文约3400字,建议阅读10+分钟. 免费开源人工智能手册,带你快速上手写代码! [ 导读 ]市面上很多人工智能相关的书籍.大部分的书,面向小白,内容深度不够:小部分教材书或者科研书,内 ...
- 机器学习的宝典-华校专老师的笔记
华校专,清华航天学院工程力学本科,国防科大计算机专业硕士.清华四年每年成绩都是本系头名,曾任阿里巴巴资深算法工程师,现任智易科技首席算法研究员,<Python 大战机器学习>的作者. 这是 ...
- XGBOOST回归用法和官方参数解释
XGBoost Parameters 本文连接官网地址:https://xgboost.readthedocs.io/en/latest/parameter.html Before running X ...
- 《深度学习,统计学习,数学基础》人工智能算法工程师手册
[ 导读 ]市面上很多人工智能相关的书籍.大部分的书,面向小白,内容深度不够:小部分教材书或者科研书,内容艰深,又过于复杂.那么有没有,面向算法工程师(程序员)人群的,面向有一定数学基础.算法基础,能 ...
- 《AI算法工程师手册》
本文转载自:http://www.huaxiaozhuan.com/ 这是一份机器学习算法和技能的学习手册,可以作为学习工作的参考,都看一遍应该能收获满满吧. 作者华校专,曾任阿里巴巴资深算法工程师, ...
- flutter开发中常用的dart插件
flutter插件官网地址:https://pub.dartlang.org/packages/ 1. image_picker 一个可以从图库选择图片,并可以用相机拍摄新照片的flutter插件 2 ...
- 用Flutter + Dart快速构建一款绝美移动App
作者 | Wojciech Kuroczycki 译者 | 弯月 来源 | CSDN(ID:CSDNnews) 如今,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不暇接的新 ...
- 《The Coaching Booster》问与答
由Shirly Ronen-Harel和Jens R. Woinowski 编写的<The Coaching Booster> 一书探讨了不同的教练方法和实践,并介绍了一种教练框架,支持教 ...
- 一种事件相机描述子——DART
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 一.背景知识 在物体分类.目标跟踪等问题下,我们经常需要提取物体的一些特征.传统图像中常使用描述子(例 ...
- Dart In Action -Dart快速入门(二)
写在前面 本文基本上是将dart官网部分内容进行翻译,没兴趣的请出门左转至Dart的官网,有兴趣的同志请继续阅读本文. Flutter教程在这里 Dart的一些重要概念 当你学习Dart语言时,记住这 ...
最新文章
- 前端的小玩意(5)——用dojo写的二级下拉菜单自动添加功能
- 检查密钥是否存在于json对象中
- Python学习day13-函数进阶(1)
- 高人对libsvm的经典总结(全面至极)
- 在 Eclipse Galileo 中更快地编写 Java 代码使用新的 toString() 生成器
- 搜索引擎学习(三)Lucene查询索引
- springcloud(二):注册中心Eureka
- 分析PCB技术印制电路板的可靠性设计(z)
- 【剑指offer】面试题33:二叉搜索树的后序遍历序列
- OpenCV3学习(7.1)——图像分割之一(漫水填充FloodFill)
- 配置多台机器SSH相互通信信任
- Word文档中页眉页脚怎么设置
- ElasticsearchTemplate的详细使用,完成多条件查询、匹配度查询等
- length()与lengthb()的区别
- 香港理工大学,新设“元宇宙科技”专业
- Linux 快速修改某个分区的名称/标签
- 卫星各个波段的说明及用途(C/Ku/Ka/S/L)
- Jmeter(十八):硬件性能监控指标
- 谷歌基情录:TensorFlow、Hadoop、MapReduce 都靠他们诞生!
- 计算机音乐一次就好歌词,沈腾歌曲一次就好歌词
热门文章
- 挂yy协议的服务器,yy协议挂机软件
- vue解决mintui中使用MessageBox弹窗拦截,移动端多次点击手机的物理返回键,选择确定后页面返回不正确问题
- cba篮球暂停次数和时间_CBA在比赛时,为什么有“官方暂停”?
- 前端JavaScript学习小总结
- 人工智能资料库:第37辑(20170220)
- 分享几款交互UI设计软件用法,了解后再选择
- 一只青蛙跳向三个台阶_青蛙跳台阶算法
- 梅隆大学计算机专业申请,卡内基梅隆大学计算机专业申请条件(附案例)
- 博客园app for xamarin android
- 图片灯箱插件-lightBox