随机森林很是像《机器学习实践》里面提到过的那个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图咱们能大体看出哪些类是比较容易搞混的:
生成下图:
能够看出,第二列第三列存在着容易混淆的状况。
R语言包中提供的随机森林功能包还有不少,对于调优颇有帮助,请务必查询相关资料并掌握。
另外,部分变种的随机森林算法还能够用来作回归。