随机森林

来源:互联网 发布:如何申请域名注册机关 编辑:程序博客网 时间:2024/04/30 23:00

        随机森林(Random Forest)是Ensemble methonds中的一种。Ensemble methods对于训练集正负样本比例极不平衡问题的训练效果非常好,泛化能力很强(本人亲测),还包括GBDT、AdaBoost等算法。

       随机森林,顾名思义,就是用随机的方式建立一个森林,森林里面由很多决策树组成,每棵树相互独立。某个技术文章这样比喻:随机森林中的每一棵树都如同精通某一狭小领域的专家。个人认为这是对随机森林中决策树最好的概括,后面谈到随机采样和完全分裂,对这句话会有更深刻的理解。当有一个新的输入样本进入的时候,就让森林中的每一棵决策树对这一输入应该分到哪一类独立地作出决策并投票,最后通过多数表决进行分类。这好比某人大代表提出了某个提案,送到人民代表大会上进行表决,每位人大代表都是各个领域的专家,他们对这一提案举手投票最后根据票数决定提案是否通过。

随机森林最重要的两点在于随机采样完全分裂

       随机采样:随机森林对训练样本集中数据的行和列进行有放回的采样。对于列采样,从N个特征中随机选择M个(M<<N)。对于行采样,若输入样本为K个,则采样的样本也为K个,也就是说每棵树拿来训练的样本集和原始的训练集一样有K行,不过这K行里面有重复记录,这样的好处在于每一棵树的输入样本都不是全部的样本,使得随机森林能够有效地避免过拟合的发生。由于每棵树不能学习到全部的样本以及全部的特征,相当于它们各自只在某一个小领域学习。

      完全分裂:对随机采样后的数据使用完全分裂的方式建立决策树,即让每一棵树都尽情生长,而且不需要剪枝。这就相对于让每一棵树在各自的小领域中尽情学习从而达到精通成为“专家”。

     在Python的sklearn包中有专门地RandomForestClassifer可供调用:

    

class RandomForestClassifier(self,n_estimators=10,criterion='gini',max_depth=None,                             min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,     max_features='auto',max_leaf_nodes=None,bootstrap=True,oob_score=False,     n_jobs=1,random_state=None,verbose=0,warm_state=False,class_weight=None)

n_estimators:决策树的个数

criterion:决策树生长最优分割的寻找方法,默认是gini法

bootstrap:默认为True,就是采用有放回的采样

oob_score:oob的意思是out of band,就是随机采样过程中没被选中的数据,可以利用这些数据对模型做简单的验证从而免去交叉验证

n_jobs:并行的进程数,若为1则不并行

random_state:不同随机森林的状态数,若生成N个随机森林则有N个状态

verbose:默认为0,不输出多余信息

warm_state:热启动,True表示使用上次调用该类的结果

class_weight:各个类别的权重


0 0
原创粉丝点击