随机森林在sklearn中的实现

随机森林

1 概述

1.1 集成算法概述

集成学习本身不是单独的机器学习算法,而是通过在数据上构建多个模型,集成所有模型的建模结果。
集成算法的目标:集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获取比单个模型更好的回归或分类表现。
多个模型集成成为的模型叫做集成评估器(ensemble estimator),组成集成评估器的每个模型都叫做基评估器(base estimator)。通常来说,有三类集成算法:装袋法(Bagging)、提升法(Boosting)和stacking。
在这里插入图片描述
Bagging的核心思想是构建多个相互独立的评估器,然后对其预测进行平均或多数表决原则来决定集成评估器的结果,代表模型就是随机森林。
Boosting中基评估器是相关的,是按照顺序一一构建的,其核心思想是结合弱评估器的力量一次次对难以评估的样本进行预测,从而构建一个强评估器。代表模型有Adaboost和梯度提升树。

1.2 sklearn中的集成算法

sklearn中的集成算法模块ensemble

  1. ensemble.AdaBoostClassifier:AdaBoost分类
  2. ensemble.AdaBoostRegressor:Adaboost回归
  3. ensemble.BaggingClassifier:装袋分类器
  4. ensemble.BaggingRegressor:装袋回归器
  5. ensemble.ExtraTreeClassifier:Extra-trees分类(超树、极端随机数)
  6. ensemble.ExtraTreeRegressor:Extra-trees回归
  7. ensemble.GradientBoostingClassifier:梯度提升分类
  8. ensemble.GradientBoostingRegressor:梯度提升回归
  9. ensemble.IsolationForest:隔离森林
  10. ensemble.RandomForestClassifier:随机森林分类
  11. ensemble.RandomForestRegressor:随机森林回归
  12. ensemble.RandomTreeEmbedding:完全随机数的集成
  13. ensemble.VotingClassifier:用于不合适估算器的软投票/多数规则分类器

2 RandomForestClassifier

sklearn.ensemble.RandomForestClassifier(n_estimators = ‘10’,criterion = ‘gini’,max_depth = None,min_samples_split = 2,min_samples_leaf = 0.0,max_features = ‘auto’,max_leaf_nodes = None,min_impurity_decrease = 0.0,min_impurity_split=None,bootstrap = True,oob_score = ,n_jobs = None,random_satate = None,verbose = 0,warm_start =False,class_weight = None)
随机森林是非常具有代表性的Bagging集成算法,它所有的基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器。

2.1 重要参数
2.1.1 控制基评估器的参数

见决策树
单个决策树的准确率越高,随机森林的准确率也会越高,因为Bagging是依赖于平均值或者少数服从多数原则来决定集成的结果的。

2.1.2 n_estimators

这是森林中树木的数量,是基评估器的数量。这个参数对随机森林模型的精确性影响是单调的,n_estimators越大,模型的效果往往越好。但是任何模型都与决策边界,n_estimators达到一定程度后,随机森林模型的精确性往往不再上升而开始波动,并且,n_estimators越大,需要的计算和内存也越大,训练的时间也越长。应该在训练难度和模型效果之间取得平衡。
n_estimators的默认值从10调整为100,说明调参倾向是要更大的n_estimators。
随机森林是无法被可视化的。

2.1.3 random_state

随机森林的本质是一种bagging集成算法,bagging是对基评估器的预测结果进行平均或用多数表决原则来决定集成评估器的结果。
使用了一样的类DecisionTreeClassifier,一样的参数,一样的训练集和测试集,为什么随机森林里的众多数会有不同的判断结果?sklearn中的分类树DecisionTreeClassifier自带随机性,所以随机森林中的树天生就都是不一样的,决策树从最重要的特征中选出一个特征来进行分枝,因此每次生成的决策树都不一样,这个功能由参数random_state控制。随机森林中也有random_state,用法和分类树中相似,只不过在分类树中,一个random_state只控制生成一棵树,而随机森林中的random_state控制的是生成森林的模式,而非让一个森林中只有一棵树。
当random_state固定时,随机森林中生成的是一组固定的树,但每棵树依然是不一致的(每棵树的random_state不同),这是用“随机挑选特征进行分枝”的方法得到的随机性,并且可以证明,当这种随机性越大的时候,bagging的效果一般会越来越好。用bagging集成时,基分类器应当是相互独立的,是不相同的。
但这种做法的局限性很强,当需要成千上万棵树的时候,数据不一定能够提供成千上万的特征来让我们构筑尽量多尽量不同的树,因此除了random_state,还需要其他的随机性。

2.1.4 boostrap & oob_score

要让基分类器尽量都不一样,一种很容易理解的方法是使用不同的训练集来进行训练,而bagging正是通过有放回的随机抽样技术来形成不同的训练数据,boostrap就是用来控制抽样技术的参数。
有放回地抽取n个样本单元,组成一个自助集,要训练m棵树就要抽取m个自助集。bootstrap参数默认为True,代表采用这种有放回的随机抽样技术,通常也不会设置为False。
但是有放回抽样也会有自己的问题,由于是有放回,一些样本可能在同一个自助集中出现多次,而其他一些却可能被忽略,一般来说,自助集大约平均会包含63%的原始数据,因为每一个样本被抽到某个自助集的概率为: 1 − ( 1 − 1 n ) n 1-(1-\frac1n)^n 1(1n1)n。当 n n n足够大时,这个概率收敛于 1 − ( 1 e ) 1-(\frac1e) 1(e1),约等于0.632。也就是说会有37%的训练数据被浪费掉,没有参与建模,这些数据被称为袋外数据(out of bag data,简写为oob)。
除了最开始划分出来的测试集之外,这些袋外数据也可以被用来作为集成算法的测试集,也就是说,在使用随机森林时,可以不划分测试集和训练集,只需要用袋外数据来测试模型即可。当然,这也不是绝对的。当n和n_estimators都不够大时,可能就没有数据掉落在袋外,也就无法使用oob数据来测试模型了
如果用袋外数据来测试,需要在实例化时将oob_score这个参数调整为True,训练完毕后,可以用随机森林的另一个重要属性:oob_score_来查看模型在袋外数据上的测试结果。

2.2 重要属性和接口

重要属性:.estimators_、.oob_score_、.feature_importances_
常用接口:apply、fit、predict、score、predict_proba
predict_proba这个接口返回每个测试样本对应的被分到每一类标签的概率,标签有几个分类就返回几个概率。
传统的随机森林是利用bagging中的规则,平均或少数服从多数来决定集成的结果,而sklearn中的随机森林是平均每个样本对应的predict_proba返回的概率,得到一个平均概率,从而决定测试样本的分类。

Bonus:Bagging的另一个必要条件

使用Bagging时要求基评估器要尽量独立,且

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值