RandomForest和GradientTreeBoosting参数详解(二)

更新时间:2023-05-20 09:19:25 阅读: 评论:0

RandomForest和GradientTreeBoosting参数详解(⼆)
系列
⽬录
1 Random Forest和Gradient Tree Boosting参数详解
2 如何调参?
2.1 调参的⽬标:偏差和⽅差的协调
2.2 参数对整体模型性能的影响
2.3 ⼀个朴实的⽅案:贪⼼的坐标下降法
2.3.1 Random Forest调参案例:Digit Recognizer
2.3.1.1 调整过程影响类参数
2.3.1.2 调整⼦模型影响类参数
2.3.2 Gradient Tree Boosting调参案例:Hackathon3.x
cabinet是什么意思2.3.2.1 调整过程影响类参数
2.3.2.2 调整⼦模型影响类参数
2.3.2.3 杀⼀记回马枪
2.4 “局部最优解”(温馨提⽰:看到这⾥有彩蛋!)
2.5 类别不均衡的陷阱
artistic3 总结
4 参考资料
1 Random Forest和Gradient Tree Boosting参数详解
在ble库中,我们可以找到Random Forest分类和回归的实现:RandomForestClassifier和
RandomForestRegression,Gradient Tree Boosting分类和回归的实现:GradientBoostingClassifier和GradientBoostingRegression。有了这些模型后,⽴马上⼿操练起来?少侠请留步!且听我说⼀说,使⽤这些模型时常遇到的问题:
明明模型调教得很好了,可是效果离我的想象总有些偏差?——模型训练的第⼀步就是要定好⽬标,往错误的⽅向⾛太多也是后退。
凭直觉调了某个参数,可是居然没有任何作⽤,有时甚⾄起到反作⽤?——定好⽬标后,接下来就是要确定哪些参数是影响⽬标的,其对⽬标是正影响还是负影响,影响的⼤⼩。
ontology
感觉训练结束遥遥⽆期,sklearn只是个在⼩数据上的玩具?——虽然sklearn并不是基于分布式计算环境⽽设计的,但我们还是可以通过某些策略提⾼训练的效率。
模型开始训练了,但是训练到哪⼀步了呢?——饱暖思淫欲啊,⽬标,性能和效率都得了满⾜后,我们有时还需要有别的追求,例如训练过程的输出,袋外得分计算等等。
health
通过总结这些常见的问题,我们可以把模型的参数分为4类:⽬标类、性能类、效率类和附加类。下表详细地展⽰了4个模型参数的意义:
cern
专业英语翻译器# ★:默认值内聚力
2 如何调参?
聪明的读者应当要发问了:”博主,就算你列出来每个参数的意义,然并卵啊!我还是不知道⽆从下⼿
啊!”
参数分类的⽬的在于缩⼩调参的范围,⾸先我们要明确训练的⽬标,把⽬标类的参数定下来。接下来,我们需要根据数据集的⼤⼩,考虑是否采⽤⼀些提⾼训练效率的策略,否则⼀次训练就三天三夜,法国⼈孩⼦都⽣出来了。然后,我们终于进⼊到了重中之重的环节:调整那些影响整体模型性能的参数。
翻译文章2.1 调参的⽬标:偏差和⽅差的协调
2.2 参数对整体模型性能的影响
假设模型是⼀个多元函数F,其输出值为模型的准确度。我们可以固定其他参数,从⽽对某个参数对整体模型性能的影响进⾏分析:是正影响还是负影响,影响的单调性?
对Random Forest来说,增加“⼦模型数”(n_estimators)可以明显降低整体模型的⽅差,且不会对⼦模型的偏差和⽅差有任何影响。模型的准确度会随着“⼦模型数”的增加⽽提⾼。由于减少的是整体模型⽅差公式的第⼆项,故准确度的提⾼有⼀个上限。在不同的场景下,“分裂条件”(criterion)对模型的准确度的影响也不⼀样,该参数需要在实际运⽤时灵活调整。调整“最⼤叶节点数”(max_leaf_nodes)以及“最⼤树深度”(max_depth)之⼀,可以粗粒度地调整树的结构:叶节点
越多或者树越深,意味着⼦模型的偏差越低,⽅差越⾼;同时,调整“分裂所需最⼩样本数”(min_samples_split)、“叶节点最⼩样本数”(min_samples_leaf)及“叶节点最⼩权重总
bitch怎么读值”(min_weight_fraction_leaf),可以更细粒度地调整树的结构:分裂所需样本数越少或者叶节点所需样本越少,也意味着⼦模型越复⼀般来说,我们总采⽤bootstrap对样本进⾏⼦采样来降低⼦模型之间的关联度,从⽽降低整体模型的⽅差。适当地减少“分裂时考杂。⼀般来说,我们总采⽤bootstrap对样本进⾏⼦采样来降低⼦模型之间的关联度,从⽽降低整体模型的⽅差
虑的最⼤特征数”(max_features),给⼦模型注⼊了另外的随机性,同样也达到了降低⼦模型之间关联度的效果。但是⼀味地降低该参数也是不⾏的,因为分裂时可选特征变少,模型的偏差会越来越⼤。在下图中,我们可以看到这些参数对Random Forest整体模型性能的影响:
对Gradient Tree Boosting来说,“⼦模型数”(n_estimators)和“学习率”(learning_rate)需要联合调整才能尽可能地提⾼模型的准确度:想象⼀下,A⽅案是⾛4步,每步⾛3⽶,B⽅案是⾛5步,每步⾛2⽶,哪个⽅案可以更接近10⽶远的终点?同理,⼦模型越复杂,对应整体模型偏差低,⽅差⾼,故“最⼤叶节点数”(max_leaf_nodes)、“最⼤树深度”(max_depth)等控制⼦模型结构的参数是与Random Forest⼀致的。类似“分裂时考虑的最⼤特征数”(max_features),降低“⼦采样率”(subsample),也会造成⼦模型间的关联度降低,整体模型的⽅差减⼩,但是当⼦采样率低到⼀定程度时,⼦模型的偏差增⼤,将引起整体模型的准确度降低。还记得“初始模型”(init)是什么吗?不同的损失函数有不⼀样的初始模型定义,通常,初始模型是⼀个更加弱的模型(以“平均”情况来预测),虽说⽀持⾃定义,⼤多数情况下
营业厅英文
保持默认即可。在下图中,我们可以看到这些参数对Gradient Tree Boosting整体模型性能的影响:
2.3 ⼀个朴实的⽅案:贪⼼的坐标下降法
到此为⽌,我们终于知道需要调整哪些参数,对于单个参数,我们也知道怎么调整才能提升性能。然⽽,表⽰模型的函数F并不是⼀元函数,这些参数需要共同调整才能得到全局最优解。也就是说,把这些参数丢给调参算法(诸如Grid Search)咯?对于⼩数据集,我们还能这么任性,但是参数组合爆炸,在⼤数据集上,或许我的⼦⼦孙孙能够看到训练结果吧。实际上⽹格搜索也不⼀定能得到全局最优解,⽽另⼀些研究者从解优化问题的⾓度尝试解决调参问题。
⽆法对整体模型性能进⾏量化,也就谈不上去⽐较参数影响整体模型性能的程度。是的,我们还没有⼀个准确的⽅法来量化整体模型性能,只能通过交叉验证来近似计算整体模型性能。然⽽交叉验证也存在随机性,假设我们以验证集上的平均准确度作为整体模型的准确度,我们还得关⼼在各个验证集上准确度的变异系数,如果变异系数过⼤,则平均值作为整体模型的准确度也是不合适的。在接下来的案例分析中,我们所谈及的整体模型性能均是指平均准确度,请各位留⼼。
2.3.1 Random Forest调参案例:Digit Recognizer
2.3.1.1 调整过程影响类参数
⾸先,我们需要对过程影响类参数进⾏调整,⽽Random Forest的过程影响类参数只有“⼦模型数”(n_estimators)。“⼦模型数”的默认
值为10,在此基础上,我们以10为单位,考察取值范围在1⾄201的调参情况:

本文发布于:2023-05-20 09:19:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/115625.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   参数   整体   影响   调整
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图