ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略-阿里云开发者社区

开发者社区> 一个处女座的程序猿> 正文

ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略

简介: ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略
+关注继续查看

随机森林RF算法简介

image.png

 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。它包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。随机森林是一种灵活且易于使用的机器学习算法,即便没有超参数调优,也可以在大多数情况下得到很好的结果。随机森林也是最常用的算法之一,因为它很简易,既可用于分类也能用于回归。

        随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的Bagging思想。


1、RF基本的构建算法过程


1. 用N来表示训练用例(样本)的个数,M表示特征数目。

2. 输入特征数目m,用于确定决策树上一个节点的决策结果;其中m应远小于M。

3. 从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。

4. 对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这m个特征,计算其最佳的分裂方式。

5. 每棵树都会完整成长而不会剪枝,这有可能在建完一棵正常树状分类器后被采用)。


2、RF算法相关文献、论文


1. Panda Biswanath , Joshua S. Herbach , Sugato Basu , and Roberto J. Bayardo .( 2009 ).PLANET: Massively Parallel Learning of Tree Ensembles with MapReduce. Proceedings of the 35th International Conference on Very Large Data Bases. Retrieved from http://research.google.com/pubs/pub36296.html .

2. Leo Breiman . (September, 1994 ). Bagging Predictors. Technical Report No. 421.Department of Statistics, UC Berkeley. Retrieved from http:// statistics.berkeley.edu/sites/default/files/tech-reports/421.pdf .

3. Leo Breiman . (2001). Random forests . Machine Learning g , 45 : 5 – 32 . Retrieved from http://oz.berkeley.edu/~breiman/randomforest2001.pdf .

4. J.H. Friedman . (2001). Greedy Function Approximation: A Gradient Boosting Machine .Annals of Statistics,29(5): 1189–1232.Retrieved from http://statweb. stanford.edu/~jhf/ftp/trebst.pdf.

5. J.H. Friedman . (2002). Stochastic Gradient Boosting . Computational Statistics and Data Analysis , 38 (4): 367– 378 . Retrieved from http://statweb.stanford.edu/~jhf/ftp/stobst.pdf .

随机森林RF算法的应用


1、RF用于回归


klearn.ensemble.RandomForestRegressor的类构造函数


函数API官方解释:https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor

(1)、重点参数解释

n_estimators:整型,可选(缺省值为10)。此参数指定集成方法中决策树的数目。通常缺省值就可以工作得很好。如果想获得最佳的性能,就需要多于10 个决策树。可以通过做实验尝试确定最佳的决策树数目。正如全书始终强调的,合适的模型复杂度(决策树的深度和决策树的数目)取决于问题的复杂度和可获得的数据的规模。比较好的尝试是100 ~ 500。


max_depth:整型或者none, 可选(缺省值为None)。如果这个参数设置为None,决策树就会持续增长,直到叶子节点为空或者所含数据实例小于min_samples_split。除了指定决策树的深度,可以用参数max_leaf_nodes 来指定决策树的叶子节点数。如果指定了max_leaf_nodes,max_depth 参数就会被忽略。不设置max_depth,让决策树自由生长,形成一个满度的决策树可能可以获得性能上的好处。当然与之相伴的代价就是训练时间。在模型的训练过程中,可能需要尝试不同深度的决策树。


min_sample_split:整型,可选(缺省值为2)。当节点含有的数据实例少于min_sample_split 时,此节点不再分割。对含有较少实例的节点进行分割是过拟合错误的源头。


min_samples_leaf:整型,可选(缺省值为1)。如果分割导致节点拥有的数据实例少于min_sample_leaf,分割就不会进行。这个参数的缺省值实际上导致此参数被忽略。通常这是可行的,特别是对数据集进行头几次试运行时。可以用各种方法为这个参数选择一个更有意义的值。一个方法是参数选取为叶子节点含有实例数的平均值,这样如果叶节点含有多于1 个的数据实例,就可以获得更低的均方差。另一种方法是将此参数看作控制决策树深度的替代方法。


max_features:整型、浮点型或字符串型,可选(缺省值为None)。当查找最佳分割点时,需要考虑多少个属性是由max_features 参数和问题中一共有多少个属性共同决定的。假设问题数据集中共有nFeatures 个属性。则:

● 如果 max_features 是整型,则在每次分割时考虑 max_features 个属性。注:如果max_features > nFeatures,则抛出错误。

● 如果 max_features 是浮点型,max_features 表示需考虑的属性占全部属性的百分比,即int( max_features*nFeatures)。

● 可选择的字符串值如下:

auto max_features=nFeatures

sqrt max_features=sqrt(nFeatures)

log2 max_features=log2(nFeatures)

● 如果 max_features=None, 则 max_features=nFeatures。绝大多数训练过程的参数都在RandomForestRegressor的构造函数中设置。max_features参数是唯一没有使用缺省值。

(1)、此参数的缺省值(None)会导致在决策树的每个节点都要考虑全部的属性。这意味着实际上实现的是Bagging 方法,因为这里没有随机选择属性的过程。


Brieman 和Cutler 建议对回归问题使用sqrt(nFeatues) 个属性。模型通常对max_features 不是很敏感,但是这个参数还是有一些影响,因此可以根据需要尝试一些不同的值。


random_state:整型,RandomState 实例,或者None ( 缺省值为None)。

● 如果类型是整型,则此整数作为随机数生成器的种子。

● 如果是 RandomState 的一个实例,则此实例用来作为随机数生成器。

● 如果是None,则随机数生成器是numpy.random用的RandomState的一个实例。


      RandomForestRegressor 类有几个属性,包括用来构成集成方法的决策树。RandomForestRegressor 类有用训练好的决策树进行预测的方法,因此通常不需要直接访问这些属性。但是可能需要访问变量importances。下面是对此变量的描述。

     feature_importances这是一个数组,数组的长度等于问题的属性数(也就是nFeatures)。数组中的值是正的浮点数,表明对应的属性对预测结果的贡献重要性。属性的重要性由Brieman 在最初的随机森林论文中所提的一个方法来确定。基本思想是,每次选中一个属性,然后对属性的值进行随机置换,记录下预测准确性的变化,预测的准确性越高,此属性也越重要。


(2)、重点类解释


fit(XTrain, yTrain, sample_weight=None)

      XTrain 是属性值的数组(训练数据),它有nInstances 行和nFeatures 列。yTrain 是目标(标签)值的数组。y 同样有nInstances 行。在本章的例子中可以看到yTrain 只有一列,但是此方法可以应用于具有不同目标的模型。因此y 可以有nTargets 列,每列对应一个结果(目标,标签)集合。Sample_weight 用来对训练数据集中的每个实例分配不同的权重,它有两种形式:缺省值是None,意味着所有输入实例具有相同的权重;如果对每个实

例分配不同的权重,sample_weight 就是一个数组,具有nInstances 行和1 列。


predict(XTest)

      XTest 是属性值的数组(测试数据),基于这些属性值进行预测。此数组是predict() 方法的输入,此数组的列数与输入fit() 的数组的列数相同,但是可能具有不同的行数,也可能只有一行。Predict() 的输出形式与用于训练的目标数组y 相同。





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
网上各种短网址算法应用的初步详细汇总
看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个想到的就是原来公司写的一个游戏激活码规则,也就是下面的算法2,26个大写字母 26小写字母,10个数字,随机生成6个然后插入数据库对应一个id,短连接跳转的时候,根据字符串查询到对应id,即可实现相应的跳转!不过2的62次方,不知...
2121 0
一致性哈希算法应用与分析
  一致性哈希算法主要使用在分布式数据存储系统中,按照一定的策略将数据尽可能均匀分布到所有的存储节点上去,使得系统具有良好的负载均衡性能和扩展性。感觉一致性哈希与数据结构中的“循环队列”还是有一点联系的。
749 0
Directx11教程(49) stencil的应用-镜面反射
本教程中,我们利用stencil来实现一个镜面反射效果。 1、首先我们要在D3DClass中增加几个成员变量及函数。 ID3D11DepthStencilState* m_depthStencilStateMirror; ID3D11DepthStencilState* ...
860 0
ML之SVM:SVM算法的简介、应用、经典案例之详细攻略(一)
ML之SVM:SVM算法的简介、应用、经典案例之详细攻略
21 0
EL:集成学习(Ensemble Learning)的概念讲解、问题应用、算法分类、关键步骤、代码实现等相关配图详细攻略
EL:集成学习(Ensemble Learning)的概念讲解、问题应用、算法分类、关键步骤、代码实现等相关配图详细攻略
8 0
直立平衡车的姿态测量卡尔曼滤波算法原理与应用(附代码及调试截图)
        鄙人最近测量调试直立平衡车的姿态角度时,用到了卡尔曼滤波算法。本着知其然还需知其所以然的学习精神,在网上阅览了很多关于滤波原理及算法应用的文章,加上自己的调试经验,有了一点小小的心得,现在分享给大家。
2305 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载