随机森林面试题 简单介绍随机森林 一种基于树模型的Bagging的优化版本,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的特点。 多次随机取样,多次随机取属性,选取最优分割点,构建多个(CART)分类器,投票表决 算法流程: 输入为样本集$D=\{(x,y1),(x2,y2) \dots (xm,ym)\}$,弱分类器迭代次数$T$。 输出为最终的强分类器$f(x)$ 对于$t=1,2 \dots T$ 对训练集进行第$t$次随机采样,共采集$m$次,得到包含$m$个样本的采样集Dt
一种基于树模型的Bagging的优化版本,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的特点。
多次随机取样,多次随机取属性,选取最优分割点,构建多个(CART)分类器,投票表决
算法流程:
输入为样本集D=\{(x,y_1),(x_2,y_2) \dots (x_m,y_m)\},弱分类器迭代次数T。
输出为最终的强分类器f(x)
对于t=1,2 \dots T
如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
多次有放回的随机取样,多次随机选择特征
随机森林中的每一颗树都是过拟合的,拟合到非常小的细节上
随机森林通过引入随机性,使每一颗树拟合的细节不同
所有树组合在一起,过拟合的部分就会自动被消除掉。
因此随机森林出现过拟合的概率相对低。
全样本训练忽视了局部样本的规律(各个决策树趋于相同),对于模型的泛化能力是有害的,使随机森林算法在样本层面失去了随机性。
随机特征保证基分类器的多样性(差异性),最终集成的泛化性能可通过个体学习器之间的差异度而进一步提升,从而提高泛化能力和抗噪能力。
因为在个体决策树的构建过程中,Bagging使用的是“确定型”决策树,bagging在选择划分属性时要对每棵树是对所有特征进行考察;而随机森林仅仅考虑一个特征子集。
袋外数据(OOB): 大约有1/3的训练实例没有参与第k棵树的生成,它们称为第k棵树的袋外数据样本。
在随机森林中某个特征X的重要性的计算方法如下:
**n_estimators:**随机森林建立子树的数量。
较多的子树一般可以让模型有更好的性能,但同时让你的代码变慢。需要选择最佳的随机森林子树数量
**max_features:**随机森林允许单个决策树使用特征的最大数量。
增加max_features一般能提高模型的性能,因为在每个节点上,我们有更多的选择可以考虑。然而,这未必完全是对的,因为它降低了单个树的多样性,而这正是随机森林独特的优点。但是,可以肯定,你通过增加max_features会降低算法的速度。因此,你需要适当的平衡和选择最佳max_features。
max_depth: 决策树最大深度
默认决策树在建立子树的时候不会限制子树的深度
**min_samples_split:**内部节点再划分所需最小样本数
内部节点再划分所需最小样本数,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。
min_samples_leaf: 叶子节点最少样本
这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。
max_leaf_nodes: 最大叶子节点数
通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。
min_impurity_split: 节点划分最小不纯度
这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点。一般不推荐改动默认值1e-7。
优点
缺点
Adaboost算法利用同一种基分类器(弱分类器),基于分类器的错误率分配不同的权重参数,最后累加加权的预测结果作为输出。
在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。
随机森林和Adaboost算法都可以用来分类,它们都是优秀的基于决策树的组合算法。