首页 > Python基础教程 >
-
集成学习之随机森林(2)
输出为最终的强分类器。
1)对于t=1,2...,T:
(a) 对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集
(b) 用采样集训练第t个决策树模型,在训练决策树模型的节点的时候, 在节点上所有的样本特征中选择一部分样本特征, 在这些随机选择的部分样本特征中选择一个最优的特征来做决策树的左右子树划分
2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
随机森林算法优点:
1. 训练可以高度并行化,对于大数据时代的大样本训练速度有优势;
2. 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合;
3. 两个随机性的引入,使得随机森林具有很好的抗噪声能力,对部分特征缺失不敏感;
4.(能够评估各个特征的重要性)在训练后,可以给出各个特征对于输出的重要性;
5. 由于采用了随机采样,训练出的模型的方差小,泛化能力强;
6. 相对于Boosting系列的Adaboost和GBDT, 随机森林算法实现比较简单;
7. 对数据集的适应能力强,既能处理离散型数据,也能处理连续型数据,数据集无需规范化;
8.(能够处理具有高维特征的输入样本,而且不需要降维)由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型;
9. 只有在半数以上的基分类器出现差错时才会做出错误的预测:随机森林非常稳定,即使数据集中出现了一个新的数据点,整个算法也不会受到过多影响,它只会影响到一颗决策树,很难对所有决策树产生影响。
随机森林算法缺点:
1. 在某些噪音比较大的样本集上,Random Forest模型容易陷入过拟合;
2. 比决策树算法更复杂,计算成本更高;
3. 由于其本身的复杂性,它们比其他类似的算法需要更多的时间来训练;
4. 取值划分比较多的特征容易对Random Forest的决策产生更大的影响,从而影响拟合的模型的效果。
【补充】:
(1)为什么要随机抽样训练集?
如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的,这样的话完全没有bagging的必要;
(2)为什么要有放回地抽样?
因为bagging的子数据集既不是相互独立的,也不是完全一样的,子数据集间存在一定的相似性。如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是"有偏的",也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决,这种表决应该是"求同",因此使用完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的。
(3)特征的随机抽样的结果是子数据集间有不同的子特征。
(4)随机森林分类效果(错误率)与两个因素有关:
森林中任意两棵树的相关性:相关性越大,错误率越大;
森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
随机森林的相关性包括子数据集间的相关性和子数据集间特征的相关性。相关性在这里可以理解成相似度,若子数据集间重复的样本或子数据集间重复的特征越多,则相关性越大。减小子数据间的特征选择个数,树的相关性和分类能力也会相应的降低;增大特征个数,树的相关性和分类能力会相应的提高。
参考文章:
https://www.stat.berkeley.edu/~breiman/randomforest2001.pdf
https://www.cnblogs.com/pinard/p/6156009.html