我们前边提到,随机森林是一种很灵活实用的方法,它有如下几个特点:
- 在当前所有算法中,具有较高的准确率, 即使存在缺失值问题
- 能够有效地运行在大数据集上
- 能够处理具有高维特征的输入样本,而且不需要降维
- 对于不平衡数据集来说,随机森林可以平衡误差。当存在分类不平衡的情况时,随机森林能提供平衡数据集误差的有效方法。
- 能够评估各个特征在分类问题上的重要性
- 在训练过程中,能够检测到feature之间的影响(?)。
- 在生成过程中,能够获取到内部生成误差的一种无偏估计($errOOB$)
- 随机森林抗过拟合能力比较强(虽然理论上说随机森林不会产生过拟合现象,但是在现实中噪声是不能忽略的,增加树虽然能够减小过拟合,但没有办法完全消除过拟合,无论怎么增加树都不行,再说树的数目也不可能无限增加的。)
- 随机森林能够解决分类与回归两种类型的问题,并在这两方面都有相当好的估计表现。(虽然RF能做回归问题,但通常都用RF来解决分类问题)。
- 训练速度快,容易做成并行化方法(训练时,树与树之间是相互独立的)。
————————————————
原文链接:https://blog.csdn.net/zhongjunlang/article/details/79488955
随机森林中的随机是什么意思?
随机性主要体现在两个方面:
- 随机采样:随机森林在计算每棵树时,从全部训练样本(样本数为n)中选取一个可能有重复的、大小同样为n的数据集进行训练(即booststrap采样)。
- 特征选取的随机性:在每个节点随机选取所有特征的一个子集,用来计算最佳分割方式。
————————————————
原文链接:https://blog.csdn.net/zhongjunlang/article/details/79488955
特征重要性评估
用随机森林进行特征重要性评估的思想其实很简单,说白了就是看看每个特征在随机森林中的每颗树上做了多大的贡献,然后取个平均值,最后比一比特征之间的贡献大小。
好了,那么这个贡献是怎么一个说法呢?通常可以用基尼指数(Gini index)或者袋外数据(OOB)错误率作为评价指标来衡量。
1 袋外数据错误率 (原文链接:https://blog.csdn.net/XindiOntheWay/article/details/82077651)
计算某个特征X的重要性时,具体步骤如下:
1)对每一颗决策树,选择相应的袋外数据(out of bag,OOB)计算袋外数据误差,记为$errOOB_1$。
所谓袋外数据是指,每次建立决策树时,通过重复抽样得到一个数据用于训练决策树,这时还有大约1/3的数据没有被利用,没有参与决策树的建立。这部分数据可以用于对决策树的性能进行评估,计算模型的预测错误率,称为袋外数据误差。
这已经经过证明(?)是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的验证集来获取测试集误差的无偏估计。
2)随机对袋外数据OOB所有样本的特征X加入噪声干扰(可以随机改变样本在特征X处的值),再次计算袋外数据误差,记为$errOOB_2$。
3)假设森林中有$N$棵树,则特征X的重要性=$\sum_{i=1}^N (errOOB_{2, i}−errOOB_{1, i}) / N$。这个数值之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即$errOOB_2$上升),说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。
2 特征选择 (原文链接:https://blog.csdn.net/zrh_CSDN/article/details/81395735)
在特征重要性的基础上,特征选择的步骤如下:
1)计算每个特征的重要性,并按降序排序
2)确定要剔除的比例,依据特征重要性剔除相应比例的特征,得到一个新的特征集
3)用新的特征集重复上述过程,直到剩下m个特征(m为提前设定的值)。
4)根据上述过程中得到的各个特征集和特征集对应的袋外误差率,选择袋外误差率最低的特征集。