随机森林的训练使用

关于随机森林特有的参数:

  • n_estimators=10: 决策树的个数,越多越好,但是性能就会越差,至少100左右(具体数字忘记从哪里来的了)可以达到可接受的性能和误差率。

  • bootstrap=True: 是否有放回的采样。

  • oob_score=False: oob(out of band,带外)数据,即:在某次决策树训练中没有被bootstrap选中的数据。多单个模型的参数训练,我们知道可以用cross validation(cv)来进行,但是特别消耗时间,而且对于随机森林这种情况也没有大的必要,所以就用这个数据对决策树模型进行验证,算是一个简单的交叉验证。性能消耗小,但是效果不错。

  • n_jobs=1: 并行job个数。这个在ensemble算法中非常重要,尤其是bagging(而非boosting,因为boosting的每次迭代之间有影响,所以很难进行并行化),因为可以并行从而提高性能。1=不并行;n:n个并行;-1:CPU有多少core,就启动多少job

  • warm_start=False: 热启动,决定是否使用上次调用该类的结果然后增加新的。

  • class_weight=None: 各个label的权重。

进行预测可以有几种形式:

  • predict_proba(x): 给出带有概率值的结果。每个点在所有label的概率和为1.

  • predict(x): 直接给出预测结果。内部还是调用的predict_proba(),根据概率的结果看哪个类型的预测值最高就是哪个类型。

  • predict_log_proba(x): 和predict_proba基本上一样,只是把结果给做了log()处理

应用:

随机森林(Random Forest,简称RF)是一种基于决策树基模型的集成学习方法,其核心思想是通过特征采样来降低训练方差,提高集成泛化能力。这里我们采用sklearn.ensemble.RandomForestClassifier来随机森林的训练与预测任务。

在RF(或GBDT)的训练过程中,参数调节(parameter tuning)十分重要,一般地,将集成学习模型的参数分为两大类:过程参数和基学习器参数,一般地,先调试过程参数(如RF的基学习器个数n_estimators等),然后再调试基学习器参数(如决策树的最大深度max_depth等)。

下面讨论几个重要参数:

  • N/P_ratio(负正样本比例)

    其实对于随机森林模型和下面的GBDT模型来说。其基学习器(决策树)采用“entropy”、“gini“等作为建树依据,对不同类别的划分具有强制作用。这类的模型对于类别失衡不敏感。但是过量冗余的负样本会严重加大训练消耗,所以也可以考虑在不影响模型训练的前提下对数据进行采样。

  • n_estimators(森林规模)

    n_estimators 代表随机森林中基学习器(决策树)的个数,对应着“森林”的大小。一般地,森林规模越大,集成的方差越小,模型泛化能力越强,但规模越大导致计算开销越大,所以在保证泛化能力前提下取较合适的 n_estimators 值即可。

    下图示是在某次参数调节中验证集 f1_score 随 n_estimators 的变化曲线,可以看到当 n_estimators 达到一定大小以后,继续增大无助于模型性能的提升。

    这里写图片描述

  • max_depth(树深度)

    max_depth 属于基学习器参数,它控制着每个决策树的深度,一般来说,决策树越深,模型拟合的偏差越小,但同时拟合的开销也越大。一般地,需要保证足够的树深度,但也不宜过大。

    下图示为某次参数调节过程中验证集 f1_score 随 max_depth 的变化曲线,可以看到当 max_depth 达到一定大小以后,继续增大无助于模型性能的提升。

    这里写图片描述

  • min_samples_split(划分样本数)/min_samples_leaf(叶最小样本数)

    这两个参数控制着分支粒度,防止着过拟合,效果相似。在RF中单个基学习器关注偏差,其叶节点粒度应该很小,所以这两个参数应设置得比较小。

  • cut_off(预测概率阈值)

    模型在对样本进行二分类预测时,首先得出的是样本所属类别的概率,然后通过阈值(如取cut_off = 0.5)划分得出结果。比如说:大于阈值判为正例,小于阈值的判为反例。该阈值反应了我们对于预测把握的估计,阈值越大的,要求的预测似然越大,对应的预测类别特征空间相应的收缩。

    下图示为某次参数调节过程中验证集 f1_score 随 cut_off 的变化曲线,可以看到,此时的阈值应取大一些。

    这里写图片描述

此外,还有许多的参数需要在模型训练时予以考虑。总的来说,参数调节是为了找到最适合于当前数据分布下的模型,由于参数众多,要找到这样一个全局最优的参数组合在实践中往往做不到,一个合理的方法是采用贪心的思路,先过程参数再基学习器参数,粗调与细调相结合,争取找到局部最优的参数组合,多次迭代此过程,使得局部最优的参数组合满足任务要求。

下面是两套参数组合下的预测结果评分,可以看到,基于此随机森林模型的预测结果明显优于之前的结果:

这里写图片描述




阅读更多
文章标签: 大数据  RF
个人分类: 学习者
下一篇GBDT和xgboost面试
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭