决策树(二):随机森林(random forest)

随机森林,属于集成算法bagging的一种,关于什么是bagging看这里决策树(一)集成学习 (ensemble learning)–boosting与bagging的区别

1、简单原理以及特点

1)随机森林,属于集成算法bagging的一种,由多个基分类器组合而成,最终的预测结果是多个基分类器结果的平均值(回归问题)/众数(分类问题)。
2)各个基分类器之间相互独立,使用的基分类器是CART,CART是分类回归树,既可以用来分类,也可以用来进行回归。CART用作回归树时用平方误差最小化作为选择特征的准则,用作分类树时采用基尼指数最小化原则(该原则不关心具体的特征值,只跟特征的分布有关,百度一下gini指数的计算公式就能明白),进行特征选择,递归地生成二叉树。
3)在生成每一棵树的时候,都随机从原样本集中有放回的进行采样(自主采样),生成一个子集。并且也随机从M个特征里面挑选m(m小于M)个特征,用这些样本和特征训练该决策树。随机选样本,随机选特征。
4)每棵树都尽最大程度的生长,并且没有剪枝过程。这个不必担心过拟合的问题,因为在构建每一棵树时,用于训练的样本是原样本集的子集,特征也是原特征的子集,让该树无限生长,虽然会导致该树过拟合,但是也只是在该子集上过拟合,而不是在原样本集上过拟合。随机森林会有若干个这样的树,用于训练每一棵树的样本都不一样,并且都是原样本集的子集,而随机森林最后的预测结果是这些树的综合,所以并不会在原样本集上过拟合。

2、优点

1)在当前所有算法中,具有极好的准确率;
2)能够有效地运行在大数据集上;
3)能够处理具有高维特征的输入样本,而且不需要降维;
4)能够评估各个特征在分类/回归问题上的重要性;
5)在生成过程中,能够获取到内部生成误差的一种无偏估计;
6)对缺省值不敏感,因为随机选样本,随机选特征;
7)对于样本分布没有先验假设;

这以上的优点,重点分析一下第4、5、6个,其他的都好理解。

2.1 能够评估各个特征在分类问题上的重要性

下面对随机森林如何计算特征重要性(importance)进行说明,随机森林可以输出两种 feature_importance,分别是Variable importance和Gini importance,两者都是feature_importance,只是计算方法不同。

Variable importance

1)对每一颗决策树,选择相应的袋外数据(out of bag,OOB)​计算袋外数据误差,记为errOOB1。

所谓袋外数据是指,每次建立决策树时,通过自主采样(有放回采样)得到原样本集的一个子集,进行训练​,这时还有大约1/3的样本没有被利用,没有参与当前决策树的建立。这部分样本可以用于对当前决策树的性能进行评估,计算当前决策树的预测错误率,称为袋外数据误差。

这个步骤经过证明是无偏估计的,oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证。所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。

​2)随机对袋外数据OOB所有样本的特征X加入噪声干扰(可以随机改变样本在特征X处的值),再次计算袋外数据误差,记为errOOB2。
3)​假设森林中有N棵树,则特征X的重要性=∑(errOOB2-errOOB1)/N。这个数值之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即errOOB2上升),说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。

Gini importance

选定一个feature M,统计随机森林的每一棵树中,由M形成的分支节点的Gini指数下降程度(或不纯度下降程度)之和,这就是特征M的importance。

两者对比来看,前者比后者计算量更大,后者只需要一边构建DT,一边做统计就可以。从sklearn的官方文档对feature_importances_参数的描述来看,sklearn应当是使用了Gini importance对feature进行排序,同时sklearn把所有的Gini importance以sum的方式做了归一化,得到了最终的feature_importances_输出参数。

扫描二维码关注公众号,回复: 2471860 查看本文章

参考文献

【1】RandomForest中的feature_importance
【2】[Machine Learning & Algorithm] 随机森林(Random Forest)
【3】随机森林进行特征重要性度量的详细说明

猜你喜欢

转载自blog.csdn.net/lanyuelvyun/article/details/81222575