第九篇:随机森林(Random Forest)

前言

       随机森林很是像《机器学习实践》里面提到过的那个AdaBoost算法,但区别在于它没有迭代,还有就是森林里的树长度不限制。算法

       由于它是没有迭代过程的,不像AdaBoost那样须要迭代,不断更新每一个样本以及子分类器的权重。所以模型相对简单点,不容易出现过拟合。架构

       下面先来说讲它的具体框架流程。框架

框架流程

       

       随机森林能够理解为Cart树森林,它是由多个Cart树分类器构成的集成学习模式。其中每一个Cart树能够理解为一个议员,它从样本集里面随机有放回的抽取一部分进行训练,这样,多个树分类器就构成了一个训练模型矩阵,能够理解为造成了一个议会吧。dom

       而后将要分类的样本带入这一个个树分类器,而后以少数服从多数的原则,表决出这个样本的最终分类类型。机器学习

       设有N个样本,M个变量(维度)个数,该算法具体流程以下:函数

1. 肯定一个值m,它用来表示每一个树分类器选取多少个变量。(注意这也是随机的体现之一)
2. 从数据集中有放回的抽取 k 个样本集,用它们建立 k 个树分类器。另外还伴随生成了 k 个袋外数据,用来后面作检测。
3. 输入待分类样本以后,每一个树分类器都会对它进行分类,而后全部分类器按照少数服从多数原则,肯定分类结果。性能

性能制约

       1. 森林中的每一个树越茂盛,分类效果就越好。
       2. 树和树的枝叶穿插越多,分类效果就越差。学习

重要参数

1. 预选变量个数 (即框架流程中的m);
2. 随机森林中树的个数。spa

       这两个参数的调优很是关键,尤为是在作分类或回归的时候。rest

构建随机森林模型

       函数名:randomForest(......);

       函数重要参数说明:

- x,y参数天然是特征矩阵和标签向量;

- na.action:是否忽略有缺失值的样本;

- ntree:树分类器的个数。500-1000为佳;

- mtry:分枝的变量选择数;

- importance:是否计算各个变量在模型中的重要性(后面会提到)。

       构建好模型以后,带入predict函数和待预测数据集就可得出预测结果。然而,R语言中对随机森林这个机制的支持远远不止简单的作分类这么简单。它还提供如下这几个功能,在使用这些功能以前,都要先调用randomForest函数架构出模型。

使用随机森林进行变量筛选

       以前的文章提到过使用主成分分析法PCA,以及因子分析EFA,可是这两种方法都有各自的缺点。它们都是属于变量组合技术,会造成新的变量,以后通常还须要一个解释的阶段。

       对于一些解释起来比较麻烦,以及状况不是很复杂的状况,直接使用随机森林进行特征选择就能够了,下面为具体步骤:

       

       执行这个脚本后:

       

       其中的两列是衡量变量重要性的指标,越高表示该变量对分类的影响越大。第一列是根据精度平均减小值做为标准度量,而第二列则是采用节点不纯度的平均减小值做为度量标准。

       重要度的计量方法参考下图(摘自百度文库):

       

使用随机森林绘制MDS二维图

       经过MDS图咱们能大体看出哪些类是比较容易搞混的:

       

       生成下图:

       

       能够看出,第二列第三列存在着容易混淆的状况。

小结

       R语言包中提供的随机森林功能包还有不少,对于调优颇有帮助,请务必查询相关资料并掌握。

       另外,部分变种的随机森林算法还能够用来作回归。 

相关文章
相关标签/搜索