目录
1、什么是随机森林
随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支--集成学习(Ensemble Learning)方法。
从直观角度来解释,每棵树都是一个分类器(假设现在为分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的Bagging思想。
2、随机森林的特点
- 在当前所有算法中,具有极高的准确率
- 随机性的引入,使得随机森林不容易过拟合
- 随机性的引入,使得随机森林有很好的抗噪声能力
- 能够有效的运行在大数据集上
- 能够评估各个特征在分类问题上的重要性
- 能够处理具有高维特征的输入样本,而不需要降维,并且不用做特征选择
- 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
- 训练速度快,可以得到变量重要性排序
- 容易实现并行化
- 在生成过程中,能够获取到内部生成误差的一种无偏估计
- 对于缺省值问题也能够获得很好的结果
缺点
- 当随机森林中的决策树个数很多时,训练需要的空间和时间会较大
- 随机森林模型有许多不好解释的地方,算个黑盒模型
3、随机森林的评价指标--袋外误差(oob error)
随机森林的关键问题是如何选择最优的m(特征个数),要解决这个问题主要依据袋外误差率oob error(out-of-bag error)
随机森林一个重要的优点是,没有必要进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计。它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计。
在构建每棵树时,对训练集使用了不同的bootstrap sample(随机有放回的抽取)。所以对每棵树而言(假设对第K棵树),大约有1/3的训练实例没有参与第K棵树的生成,它们成为第K棵树的oob样本。
而这样的采样特点就允许我们进行oob估计,它的计算方法如下:
- 对每个样本,计算它作为oob样本的树对它的分类情况(约1/3的树)
- 然后以简单多数投票作为该样本的分类结果
- 最后用误分个数占样本总数的比率作为随机森林的oob误分率。
注意:oob误分率是随机森林泛化误差的一个无偏估计,它的结构近似于需要大量计算的k折交叉验证。
4、随机森林的生成过程
- 从原始训练集中使用Bootstraping方法随机有放回采用选出m个样本,共进行n_tree次采样,生成n_tree个训练集
- 对于n_tree个训练集,分别训练n_tree个决策树模型
- 对于单个决策树模型,假设训练样本特征的个数为n,那么每次分裂时根据信息增益/信息增益比/Gini指数选择最好的特征进行分裂
- 每棵树都一直这样分裂下去,直到该节点的所有训练样例都属于同一类。在决策树的分裂过程中不需要剪枝
- 将生成的多棵决策树组成随机森林。对于分类问题,按多棵树分类器投票决定最终分类结果;对于回归问题,由多棵树预测的均值决定最终预测结果。
5、Bagging和Boosting的概念与区别
随机森林属于集成学习(Ensemble Learning)中的bagging算法。在集成学习中,主要分为bagging算法和boosting算法。
Bagging算法(套袋法):
Bagging的算法过程如下:
- 从原始样本集中使用Bootstrap方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
- 对于k个训练集,我们训练k个模型(这个k个模型可以选择决策树,knn等)
- 对于分类问题:由投票表决产生分类结构;对于回归问题:有k个模型预测结果的均值作为最后预测结构(所有模型的重要性相同)
Boosting(提升法)
思路:主要从两个方面考虑(数据集合和学习器)
boosting的算法过程如下:
- 对于训练集的每个样本建立权值wi,增大被误分类的样本的权值
- 进行迭代的过程中,每一步迭代都是一个弱分类器,需要用某种策略将其组合,作为最终模型。(例如AdaBoost给每个弱分类器一个权值,将其线性组合为最终分类器。误差越小的弱分类器,权值越大)
Bagging,Boosting的主要区别
- 样本选择上:Bagging采用的是Bootstrap随机有放回抽样;而Boosting每一轮的训练集是不变的,改变的只是每一个样本的权重。
- 样本权重:Bagging使用的是均匀取样,每个样本权重相等;Boosting根据错误率调整样本权重,错误率越大的样本权重越大。
- 预测函数:Bagging所有的预测函数的权重相等;Boosting中误差越小的预测函数(分类器)权重越大
- 并行计算:Bagging各个预测函数可以并行生成;Boosting各个预测函数(分类器)必须按照顺序迭代生成,就是不能并行计算
决策树与这些算法框架进行结合所得到的新的算法:
- Bagging + 决策树=随机森林
- Boosting + 决策树=提升树
- Gradient Boosting+决策树=GBDT
6、决策树
常用的决策树算法有ID3,C4.5,CART三种。三种算法的模型构建思想都十分类似,只是采用了不同的指标。决策树的构建过程大致如下:
ID3,C4.5决策树的生成
输入:训练集D,特征集A,阈值eps 输出:决策树
- 若D中所有样本属于同一类Ck,则T为单节点树,将类Ck作为该节点的类标记,返回T
- 若A为空集,即没有特征作为划分依据,则T为单节点树,并将D中实例数最大的类Ck作为该节点的类标记,返回T
- 否则,计算A中各特征对D的信息增益(ID3)/信息增益比(C4.5),选择信息增益最大的特征Ag
- 若Ag的信息增益(比)小于阈值eps,则置T为单节点树,并将D中实例数最大的类Ck作为该节点的类标记,返回T
- 否则,依照特征Ag将D划分为若干非空子集Di,将Di中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树T,返回T
- 对第i个子节点,以Di为训练集,以A-{Ag}为特征集,递归地调用1~5,得到子树Ti,返回Ti
CART决策树的生成
简单介绍下CART与ID3和C4.5的区别。
- CART树是二叉树,而ID3和C4.5可以是多叉树
- CART在生成子树时,选择一个特征一个取值作为切分点,生成两个子树
- 选择特征和切分点的依据是Gini指数,选择Gini指数最小的特征及切分点生成子树
决策树的减枝
决策树的减枝主要是为了预防过拟合。主要思路是从叶子节点向上回溯,尝试对某个节点进行剪枝,比较剪枝前后决策树的损失函数值。最后通过动态规划(树形dp,)就可以得到全局最优的剪枝方案。