随机森林
算法原理(bagging):
- 随机且有放回地从训练集中的抽取N个训练样本,数据集的样本总数为N,根据这N个样本建立一个决策树,重复上述步骤n次,建立n棵决策树(每棵树的训练集都是不同的,而且里面包含重复的训练样本)
- 从数据集中随机选择k个特征,共m个特征(其中k<=m),根据这k个特征建立决策树,重复上述步骤n次,建立n棵决策树
- 对每棵决策树传递变量来预测结果,最后得到n个预测结果
- 计算每个预测结果的得票数,得票数高的预测结果作为随机森林算法的最终预测结果
针对回归问题,随机森林把所有决策树预测值的平均值作为最终预测结果。而针对分类问题,随机森林中的每棵决策树都会给出一种分类,得票数最多的那一类将作为最终的预测结果。
随机森林分类效果(错误率)与两个因素有关:
- 森林中任意两棵树的相关性:相关性越大,错误率越大;
- 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低
减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。
袋外抽样:
上面我们提到,构建随机森林的关键问题就是如何选择最优的m,优秀的树需要优秀的特征,那我们就需要知道各个特征的重要程度。在构建每棵树时,我们对训练集使用了不同的bootstrap sample(随机且有放回地抽取)。所以对于每棵树而言(假设对于第k棵树),大约有1/3的训练实例没有参与第k棵树的生成,它们称为第k棵树的袋外样本。我们可以使用这部分样本来评估特征的优劣。
对于每一棵树都有个m特征,要知道某个特征在这个树中是否起到了作用,可以随机改变这个特征的值,使得这棵树中有没有这个特征都无所谓,之后比较改变前后的测试集误差率,误差率的差距作为该特征在该树中的重要程度,测试集即为该树抽取样本之后剩余的样本(袋外样本)(由袋外样本做测试集造成的误差称为袋外误差)。
在一棵树中对于每个特征都计算一次,就可以算出每个特征在该树中的重要程度。我们可以计算出所有树中的特征在各自树中的重要程度。但这只能代表这些特征在树中的重要程度不能代表特征在整个森林中的重要程度。我们取这个特征值在多棵树中的重要程度的均值即为该特征在森林中的重要程度。如下式:
其中 表示特征 在森林中出现的次数。表示第 t 棵树中 属性值改变之后的袋外误差,表示第 t 棵树中正常 值的袋外误差。按照上面的步骤迭代多次,逐步去除相对较差的特征,每次都会生成新的森林,直到剩余的特征数为 m 为止。预测出所有所有样本的结果之后与真实值进行比较,就可以得到这个森林的套外误差率。选择套外误差率最小的森林作为最终的随机森林模型,即本文的第一张图。
优点:
- 可以处理高维数据,不用进行特征选择(特征子集是随机选择)
- 抗过拟合能力:通过平均决策树,降低过拟合的风险性
- 训练模型时速度快,成并行化方式,即树之间相互独立
- 对于不平衡的数据集来说,它可以平衡误差
- 对缺失值、异常值不敏感,如果有很大一部分的特征遗失,仍可以维持准确度
缺点:
- 据观测,随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响
参考:
https://blog.csdn.net/qq_34106574/article/details/82016442
https://baijiahao.baidu.com/s?id=1632582851666395020&wfr=spider&for=pc
https://blog.csdn.net/cg896406166/article/details/83796557