Adaboost, boosting 和bagging的比较

来源:互联网 发布:手机淘宝分类在哪 编辑:程序博客网 时间:2024/05/16 07:52

Adaboost 算法很有名,全称是adaptive boosting。 曾被称为数据挖掘十大算法之一。 davide lowe那一篇关于人脸识别的文章中就用到了这个算法。 现在总结一些这个算法。

Adaboost是一种基于boost思想的一种自适应的迭代式算法。 通过在同一个训练数据集上训练多个弱分类器(weak classifier), 然后把这一组弱分类器ensmble起来, 产生一个强分类器(strong classifier)。可以说是一个meta algorithms。

该算法的优点如下:

(1)  具有较低的泛化误差(low generalization)

(2)  改善了分类器的分类正确率

(3) 可以将这个算法配合多个分类算法使用。 例如, 我们可以选择C4.5, CART, SVM, 贝叶斯分类器, 或者decision stump等作为我们的弱分类器。

(4)容易coding

(5)不容易出现overfiting(过拟合)现象

缺点如下:

对outliers(异常点)非常的sensitive。  因为异常点容易分错, 会逐级影响后面的产生的弱分类器。

Adaboost每一轮迭代的时候都会训练一个新的弱分类器。 直至达到某个预定的足够小的错误率。  主要过程如下:

输入的训练样本数据集: N 个训练样本 其中xi表示输入样本的特征向量, yi表示样本的label, 取值为-1和1两类。

下面按照如下步骤迭代T次, 得到T个弱分类器。 最后按更新的权重进行叠加, 最终得到一个强分类器。 


并使用这个强分类器去对新的输入样本的特征向量计算出其对应的label。


训练步骤:


Adaboost的自适应在于:最开始, 所有的训练样本具有相同权重。  被前一个分类器分错的样本会被用于训练下一个分类器, 即提高这个分错的样本被选中进入下一个弱分类器选中的概率, 分对的样本被选中的概率会被降低。 Adaboost方法对于噪声数据和异常数据敏感。 Adaboos使用的弱分类器的分类效果只要比random guess(正确率为0.5)好可以了。 究竟正确率为多少, 不管, 只要大于0.5就好了。 最终, 我们会得到一个较好的模型。 对于错误率高于0.5的弱分类器也是有用的。  因为最终得到的多个弱分类器进行线性叠加的时候, 可以赋给它们系数, 同样也能提升分类效果。 


Adaboost是boosting思想的运用, 弱分类器可以是一个decision stump classifier。 一个decision stump 就是具有一个节点的决策树。 一个decision stump 一次对一个特征进行决策。 这个decision tree只做一次split, 所以是一个stump。

bagging: 也是machine learning领域的一个ensemble meta-algorithm, 这个算法能够降低variance, 并且可以避免过拟合(overfitting)。 bagging算法常常用于决策树算法(decision tree)。 bagging是用于model averaging 办法的一个特例。

对于分类问题, 有很多的emsemble methods, boosting是一个, 令一个方法就是bagging。 bagging就是从给定的原始样本集有放回的取样,我们做S次的有选择抽样, 没次抽样到和原始样本集大小相同的size, 注意, 这样我们就得到了S个新的, 和原始样本相同的size的样本集, 注意, 由于是有选择的采样, 所以新的样本集中可能有完全相同的样本。 我们用这S个 新的训练样本集分别训练S个单独的分类器。 当新来一个输入样本特征向量时候, 我们使用这S个分类器对这个样本分类,最后take majority vote, 确定这个样本的label。 

 

注意bagging的训练样本集的选择是随机的。各轮训练样本集之间是独立的。 bagging的m个分类器的分类函数是并行生成的。 进行测试的时候采用的是投票机制。 boosting的各轮样本集的选择和前面各轮的学习结果有关, boosting的各个预测函数只能顺序生成的, 所以训练比较耗时间。 预测的时候采用的是weighted sum。  bagging可通过并行训练节省训练时间,bagging和boosting都可以提高分类的准确性。 大多数数据集中, boosting的准确率是比bagging高。

 




0 0
原创粉丝点击