随机森林学习整理

参考文献

1.python机器学习——随机森林算法(Random Forest)
2.机器学习算法之随机森林算法详解及工作原理图解
3.随机森林
4.RandomForest:随机森林
5.随机森林(Random Forest)算法原理
6.快速理解bootstrap,bagging,boosting-三个概念
7.Bagging和Boosting的区别(面试准备)
8.Bagging 和Boosting 概念和区别
9.为什么说bagging是减少variance,而boosting是减少bias?
10.[Machine Learning & Algorithm] 随机森林(Random Forest)


整体把握:
集成学习(ensemble)思想是为了解决单个模型或者某一组参数的模型所固有的缺陷,从而整合起更多的模型,取长补短,避免局限性。随机森林就是集成学习思想下的产物,将许多棵决策树整合成森林,并合起来用来预测最终结果。

简记就是:“三个臭皮匠顶个诸葛亮”


1.一图胜千言:

随机森林学习整理_第1张图片


2.boosting、bagging、bootstrap、Adaboost要分清:

【1】bootstrap采样方法(自助法):(有放回产生m个自己)
Bootstrap并不是一种机器学习的训练算法,而是一种自助采样的算法!!!
自助法顾名思义,是这样一种方法:即从样本自身中再生成很多可用的同等规模的新样本,从自己中产生和自己类似的,所以叫做自助,即不借助其他样本数据。
步骤:
step1.首先,在N个样本里随机抽出一个样本x1,然后记下来,放回去;
step2.再抽出一个x2,… ,这样重复N次,即可得到N的新样本,这个新样本里可能有重复的;
step3.重复m次,就得到了m个这样的样本集合;

实际上这就是一个有放回的随机抽样问题。每一个样本在每一次抽的时候有同样的概率(1/N)被抽中。

这个方法在样本比较小的时候很有用,比如我们的样本很小,但是我们希望留出一部分用来做验证,那如果传统方法做train-validation的分割的话,样本就更小了,bias会更大,这是不希望的。而自助法不会降低训练样本的规模,又能留出验证集(因为训练集有重复的,但是这种重复又是随机的),因此有一定的优势。

【2】bagging方法(自助抽样集成 Bootstrap Aggregating):
简记:有放回抽出m个数据集,分别训练m个模型,而后对这m个模型结果进行加权融合。
全名是bootstrap aggregating,采用的是随机有放回的选择训练数据然后构造分类器,最后组合学习到的模型来增加整体的效果。(这里面是用到bootstrap的!!)

这种方法将训练集分成m个新的训练集,然后在每个新训练集上构建一个模型,各自不相干,最后预测时我们将这个m个模型的结果进行整合,得到最终结果。整合方式就是:分类问题用majority voting,回归用均值。

随机森林实际上是一种特殊的bagging方法,它将决策树用作bagging中的模型。首先,用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树,在节点找特征进行分裂的时候,并不是对所有特征找到能使得指标(如信息增益)最大的,而是在特征中随机抽取一部分特征,在抽到的特征中间找到最优解,应用于节点,进行分裂。随机森林的方法由于有了bagging,也就是集成的思想在,实际上相当于对于样本和特征都进行了采样(如果把训练数据看成矩阵,就像实际中常见的那样,那么就是一个行和列都进行采样的过程),所以可以避免过拟合。

【3】boosting方法
Boosting系列算法属于一个算法框架,与具体基分类器的学习方法独立。它会产生一系列的分类器(预测函数,基分类器),然后对所有分类器的结果进行加权融合。虽然单个基分类器的效果不好,但是经过多个基分类器的结果融合,可以获得更高的准确率。


bagging和boosting直观上很相似,但是根本性差异在于:(并行和串行)

bagging算法的训练集往往是从原数据集中有放回的抽样得到的(原数据集的一部分),每个基分类器是相互独立的,并列的。因为每个基分类器训练方法独立且相同,所以最后分类器等权重投票。
而在boosting算法中,基分类器是依次训练的,因为分错的点在接下来的训练时会更加的被侧重,也就是说,每个基分类器的训练都是建立在之前基分类器的表现基础之上的。最后分类器加权投票。

baging的训练集选择是随机的,各轮训练集之前互相独立,而boosting的各轮训练集的选择与前面各轮的学习结果相关;bagging的各个预测函数没有权重,而boost有权重;bagging的各个函数可以并行生成,而boosting的各个预测函数只能顺序生成。
对于像神经网络这样极为消耗时间的算法,bagging可通过并行节省大量的时间开销。baging和boosting都可以有效地提高分类的准确性。在大多数数据集中,boosting的准确性要比bagging高。有一些数据集中,boosting会退化(过拟合)。


Bagging和Boosting的区别整理:

1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。(直接选)

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。(有加权)

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。


【4】Adaboost方法
AdaBoost算法,全称adaptive boosting算法。AdaBoost算法也属于boosting算法系列,但是无论效果还是应用能力都强于之前的早期boosting版本,因此应用更加广泛。Adaboost算法属于boosting系列算法中的代表性算法。

AdaBoost具体做法:
对于一个数据集,先用任一弱分类算法训练得到一弱分类器,根据对训练集分对分错情况,对训练集样本分配权重,分错的样本权重更高。根据这个权重对训练集进行挑选得到新的训练集,权重大的样本更可能被选到,以此来侧重对于之前分错的样本的训练,得到第二个分类器。以此类推,不断训练多个基分类器,最后根据各个基分类器的准确率赋予分类器权重。当需要判别时,加权投票得最终判断结果。


3.为什么说bagging是减少variance,而boosting是减少bias

随机森林学习整理_第2张图片


附:在Sklearn模块库中,与随机森林算法相关的函数都位于集成算法模块ensemble中,相关的算法函数包括:
【1】随机森林算法(RandomForestClassifier)
【2】袋装算法(BaggingClassifier)
【3】完全随机树算法(ExtraTreesClassifier)
【4】迭代算法(Adaboost)
【5】GBT梯度Boosting树算法(GradientBoostingClassifier)
【6】梯度回归算法(GradientBoostingRegressor)
【7】投票算法(VotingClassifier)


1)Bagging + 决策树 = 随机森林

2)AdaBoost + 决策树 = 提升树

3)Gradient Boosting + 决策树 = GBDT

你可能感兴趣的:(机器学习,数据挖掘(DM))