您的位置:首页 > 其它

Random Forest和Gradient Boosting调参小结

2016-08-04 22:12 218 查看
先补充一下相关概念:

Bagging对样本重采样,对每一重采样得到的子样本集训练一个模型,最后取平均,降低模型的 variance。

Boosting
则是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行加权,所以随着迭代不断进行,误差会越来越小, bias 会不断降低。

bagging中的模型是强模型,偏差低,方差高。目标是降低方差。在bagging中,每个模型的bias和variance近似相同,但是互相相关性不太高,因此一般不能降低Bias,而一定程度上能降低variance。典型的bagging是random forest。

boosting中每个模型是弱模型,偏差高,方差低。目标是通过平均降低偏差。boosting的基本思想就是用贪心法最小化损失函数,显然能降低偏差,但是通常模型的相关性很强,因此不能显著降低variance。典型的Boosting是adaboost,GBDT。

过拟合的模型,通常variance比较大,这时应该用bagging对其进行修正。

欠拟合的模型,通常Bias比较大,这时应该可以用boosting进行修正。

参数可分为两类:

过程影响类(如:“子模型数”(n_estimators)、“学习率”(learning_rate)等)

子模型影响类(如:“最大树深度”(max_depth)、“分裂条件”(criterion)等)

过程影响类的参数能够引起整体模型性能的大幅度变化。一般来说,在此前提下,我们继续微调子模型影响类的参数,从而进一步提高模型的性能。

Random
Forest:



Random Forest的子模型都拥有较低的偏差,整体模型的训练过程旨在降低方差,故其需要较少的子模型(n_estimators默认值为10)且子模型不为弱模型(max_depth的默认值为None),同时,降低子模型间的相关度可以起到减少整体模型的方差的效果(max_features的默认值为auto)。

增加“子模型数”(n_estimators)可以明显降低整体模型的方差,叶节点越多或者树越深,意味着子模型的偏差越低,方差越高。一般采用bootstrap对样本进行子采样来降低子模型之间的关联度,从而降低整体模型的方差。

Gradient
Boosting:



Gradient Tree Boosting的子模型都拥有较低的方差,整体模型的训练过程旨在降低偏差,故其需要较多的子模型(n_estimators默认值为100)且子模型为弱模型(max_depth的默认值为3),但是降低子模型间的相关度不能显著减少整体模型的方差(max_features的默认值为None)。

调整“子模型数”(n_estimators)和“学习率”(learning_rate)提高模型的准确度,子模型越复杂,从而降低整体模型偏差。

tips:选取影响最大的参数进行调整即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: