集成算法,包括多种形式,顾名思义——可以是多种算法的集成,也可以是一种算法在不同设置下的集成,还可以将数据集的同部分分配不同的分类器,再将这些分类器进行集成。(包括boosting和bagging)
Bagging + 决策树 = 随机森林
AdaBoost + 决策树 = 提升树
Gradient Boosting + 决策树 = GBDT
再说到boost之前,先介绍下bagging(bootstrap aggregating)
bagging是一种基于数据随机重抽样的分类器构建方法,其是从原始数据集选择s次后得到s个新数据集的一种技术。一句话概括就是,用部分数据 or 部分特征 or 多个算法 训练一些模型;然后再组合这些模型,对于分类问题采用投票多数表决,回归问题采用求平均。——可以看出多模型组合的特点很适合并行计算
boosting(提升)是一个机器学习技术, 可以用于回归和分类问题, 它每一步产生一个弱预测模型(如决策树), 并加权累加到总模型中,最终得带一个强预测模型;
Boosting与bagging的不同处:
前面说过 “bagging + 决策树(CRAT) = 随机森林”
算法构造的特点如下:
1)RF使用了CART决策树作为弱学习器。
2)RF对决策树算法进行了改进,RF通过随机选择节点上的一部份样本特征(,普通CART决策树则是选择节点上所有样本n),选择一个最优的特征来做决策树的左右子树划分。这样进一步增强了模型的泛化能力。
3)因为每个节点选取部分样本在划分,所以有:
越小,模型越健壮,拟合越差(bias越大)
在实际案例中,一般会通过交叉验证调参获取一个合适的的值。
RF算法的流程如下:
输入为样本集D=(x1,y1),(x2,y2),...(xm,ym),弱分类器迭代次数T。输出为最终的强分类器f(x)
1)对于t=1,2...,T
a)对训练集进行第t次随机采样,得到一个包含m个样本的采样集Dm
b)用采样集Dm训练第m个决策树模型Gm(x),在训练决策树模型的节点的时候, 在所有的特征中选择一部分特征,在这些随 机选择的部分样本特征中选择最优的特征来做决策树的左右子树划分。
2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。
作为一个可以高度并行化的算法,RF在大数据时候大有可为。这里也对常规的随机森林算法的优缺点做一个总结。
RF算法优点:
1)从算法流程可以看出,RF算法可以高度并行化,对于大数据时代的大样本训练速度有优势。
2)由于可以随机选择决策树节点划分特征,这样在样本特征维度很高的时候,仍然能高效的训练模型。
3)由于采用了随机采样,训练出的模型的方差小,泛化能力强,对部分特征缺失不敏感。
4)相对于Boosting系列的Adaboost和GBDT, RF实现比较简单。
5)很容易地测量每个特征对预测的相对重要性。(sklearn中有方法)
RF的主要缺点有:
1) 在某些噪音比较大的样本集上,RF模型容易陷入过拟合。
2) 取值划分比较多的特征容易对RF的决策产生更大的影响,从而影响拟合的模型的效果。
例:
如果您想预测某人是否会点击在线广告,可以收集该广告的过去点击人员以及能够描述其做决定的特征。一旦你将这些特征和标签放入决策树中,它会生成节点和一些规则,然后你就可以预测广告是否会被点击。但决策树通常通过计算信息增益和基尼指数来生成节点和规则时,相比之下,随机森林则是随机的。
另一个区别是“深度”决策树往往会遭遇过拟合问题。而随机森林则可以通过创建随机的特征子集并使用这些子集构建较小的树,随后组成子树,这种方法可以防止大部分情况的过拟合。要注意的是,这同时会使得计算速度变慢(可通过并行化解决),并取决于随机森林构建的树。
adaBoost分类器利用同一种基分类器(弱分类器,一般选择一阶的决策树),基于分类器的错误率分配不同的权重参数,最后累加加权的预测结果作为输出。
一般指的是分类错误率接近50%。既只略优于随机猜测的分类器。adaboost即用相同的训练集,使用相同的弱分类器,选择不同的分类点,进行分类,并根据分类准确性,将准确率高的分类器的阀值提高,最后集成若干弱分类器。
有两种权重:一种是数据的权重W,另一种是弱分类器的权重alpha
1)训练全部的训练集集,为每一个样本赋予权重w,初始时权重相等(可选为1/n,其中n为样本个数)。
2)首先在训练数据集上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器,但是在第二次训练时,将会根据分类器的错误率,对数据集中样本的各个权重进行调整。将正确分类的样本权重降低,加大错误分类的样本权重。(保证权重总和=1)
3)最终,基于每个弱分类器的错误率,为所有弱分类器分配一个权重alpha。
*其中ε为分类的误差率,m为轮次i。max(ε,1e-16)是为了防止误差率率为0而造成分母为0
可以看出,alpha>0,且随着误差率ε减小而增大。
4)进行样本权重更新,既使“分类错误样本获得更高权重D”。D的更新公式为:
*其中m为第m个分类器,既迭代轮数为m。i为权重向量的第i个分量
由上式可得——分类错误和正确的样本,其权重会相差e^(2*alpha)倍,刚好是,可知分类越准确,这个权重倍差越大。
5)按照以上步骤循环直到达到停止条件(达到设定的迭代次数,或者样本的训练错误率为0)
1)W:有一个问题,如果训练数据保持不变,那么单层决策树找到的最佳决策点每一次必然都是一样的 ,这是因为单层决策树把所有可能的决策点找了一遍之后选择了最好的。所以在数据不变的情况下,必须使用数据权重。即,在秋分类的误差时候,Adaboost要求其乘上权重,即计算带上权重的误差。 例如:
在以前没有权重时(其实是平局权重时),一共10个点时,对应每个点的权重都是0.1,分错1个,错误率就加0.1;分错3个,错误率就是0.3。现在,每个点的权重不一样了,还是10个点,权重依次是[0.01,0.01,0.01,0.01,0.01,0.01, 0.01,0.01,0.01,0.91],如果分错了第1一个点,那么错误率是0.01,如果分错了第3个点,那么错误率是0.01,要是分错了最后一个点,那么错误率就是0.91。
2)alpha: 由于Adaboost中若干个分类器的关系是第N个分类器更可能分对第N-1个分类器没分对的数据,而不能保证以前分对的数据也能同时分对。所以在Adaboost中,每个弱分类器都有各自最关注的点,每个弱分类器都只关注整个数据集的中一部分数据,所以它们必然是共同组合在一起才能发挥出作用。所以最终投票表决时,需要根据弱分类器的权重来进行加权投票,权重大小是根据弱分类器的分类错误率计算得出的,总的规律就是弱分类器错误率越低,其权重就越高。
3)训练误差分析
最终的分类器是一个加法模型(组合各个弱分类器)
G(x) = sign(f(x))
损失函数为指数函数:
L(y,f(x)) = exp(-y*f(x))
1)使用简单的弱分类器,不用对特征进行筛选,也不存在过拟合的现象。
2)Adaboost算法不需要弱分类器的先验知识,最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。
3)Adaboost算法不需要预先知道弱分类器的错误率上限,且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。
4)Adaboost可以在不改变训练数据,只改变数据权值分布,使得数据在不同学习器中产生不同作用,类似于重采样。
缺点:
1)在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。此外,Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。
GBDT全称梯度下降树,在传统机器学习算法里面是对真实分布拟合的最好的几种算法之一。在被提出之初就和SVM一起被认为是泛化能力较强的算法。
Gradient Boosting + 决策树 = GBDT(Gradient Boosting Decision Tree).......名字是不是显而易见?
顾名思义,这也是一种多决策树叠加的集成算法。且每一步的弱预测模型生成都是依据损失函数的梯度方向, 称之为梯度提升(Gradient boosting)。
不过需要注意的是:
GBDT中的树是回归树(不是分类树)。( GBDT的核心在于累加所有树的结果作为最终结果,就像前面对年龄的累加(-3是加负3),而分类树的结果显然是没办法累加的,所以GBDT中的树都是回归树,不是分类树)
和随机森林RF算法可以看出,RF中的决策树是独立采样和构建,最后投票的。而从Adaboost,是在每一次构建弱分类器的时候,就对弱分类器的权重进行了定义。
所以我们想,随机森林最终投票的决策方式,是否可以变为——在构建随机森林的各个决策树的过程中就可以确定(权重?)?