Adaboost、GBM、xgboost
1、adaboost(自适应增强)使用场景:
1)用于二分类或多分类的应用场景
2)用于做分类任务的baseline:无脑化,简单,不会overfitting,不用调分类器
3)用于特征选择(feature selection)
4)Boosting用于对badcase的修正:只需要增加新的分类器,不需要变动原有分类器
5)邮件过滤、文本分类、人脸识别
应用Adaboost系列主要解决了: 两类问题、多类单标签问题、多类多标签问题、大类单标签问题,回归问题。它用全部的训练样本进行学习。
AdaBoost算法大多集中在分类问题中,近年也出现了一些回归问题的研究。寻找多个识别率不是很高的弱分类算法比寻找一个识别率很高的强分类算法要容易得多,AdaBoost算法的任务就是将容易找到的识别率不高的弱分类算法提升为识别率很高的强分类算法,这也是AdaBoost 算法的核心指导思想所在,如果算法完成了这个任务,那么在分类时,只要找到一个比随机猜测略好的弱分类算法,也就是给定一个弱学习算法和训练集,在训练集的不同子集上,多次调用弱学习算法,最终按加权方式联合多次弱学习算法的预测结果就可得到最终学习结果。
2、adaboost概念和算法思想
Adaboost(Adaptive Boosting)自适应增强的缩写:能显著提高学习精度和泛化能力。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
算法思想:给训练集中的元组重新分配权重,权重影响抽样,权重越大,越可能被抽取。迭代训练若干个分类器,在前一个分类器中被错误分类的元组被提高权重;最后由所有分类器一起投票(投票权重取决于分类器的准确率),决定分类。预测效果好的预测函数权重较大,反之较小。最终的预测函数H对分类问题采用有权重的投票方式,对回归问题采用加权平均的方法对新示例进行判别。
Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器融合起来,作为最后的决策分类器。使用adaboost分类器可以排除一些不必要的训练数据特征,并将重点放在关键的训练数据上。
Adaboost(Adaptive Boosting)算法,对于boosting算法,存在两个问题:
1. 如何调整训练集,使得在训练集上训练的弱分类器得以进行;
2. 如何将训练得到的各个弱分类器联合起来形成强分类器。
针对以上两个问题,adaboost算法进行了调整:
1. 使用加权后选取的训练数据代替随机选取的训练样本,这样将训练的焦点集中在比较难分的训练数据样本上;
2. 将弱分类器联合起来,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。
adaboost算法其实是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力。整个Adaboost 迭代算法就3步:
1)初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。
2)训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
3)将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。
adaboost的两个特性:一是训练的错误率上界,随着迭代次数的增加,会逐渐下降;二是adaboost算法即使训练次数很多,也不会出现过拟合的问题。
3、Adaboost算法的优点;
1)adaboost是一种有很高精度的分类器
2)可以使用各种方法构建子分类器,adaboost算法提供的是框架
3)当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
4)简单,不用做特征筛选
5)不用担心overfitting!
6)训练的错误率,随着迭代次数的增加,会逐渐下降
总之:由于adaboost算法是一种实现简单,应用也很简单的算法。Adaboost算法通过组合弱分类器而得到强分类器,同时具有分类错误率随着训练增加而稳定下降,不会过拟合等的性质,应该说是一种很适合于在各种分类场景下应用的算法。
Adaboost是一种比较有特点的算法,可以总结如下:
1)每次迭代改变的是样本的分布,而不是重复采样(re weight)
2)样本分布的改变取决于样本是否被正确分类:总是分类正确的样本权值低,总是分类错误的样本权值高(通常是边界附近的样本)
3)最终的结果是弱分类器的加权组合:权值表示该弱分类器的性能
与Boosting算法不同的是,adaboost算法不需要预先知道弱学习算法学习正确率的下限即弱分类器的误差,并且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,这样可以深入挖掘弱分类器算法的能力。
1、GBM(Gradient Boosting Machines)(GBM)
梯度提升机器(GBM,Gradient boosting machine):这种方法通过训练一系列决策树来产生一个预测模型,在其中,后序决策树会校正前序决策树所产生的预测误差。
Gradient Boosting是一种Boosting的方法,其与传统的Boosting的区别是,每一次的计算是为了减少上一次的残差(residual),而为了消除残差,可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说,在Gradient Boosting中,每个新的模型的建立是为了使得之前模型的残差往梯度方向减少,与传统Boosting对正确、错误样本进行加权有着很大的区别。
4、 Xgboost(eXtreme Gradient Boosting)
1)、xgboost的全称是eXtreme Gradient Boosting。它是GradientBoosting Machine的一个c++实现。xgboost最大的特点在于,它能够自动利用CPU的多线程进行并行,同时在算法上加以改进提高了精度。现在xgboost已封装成了python库,并制作成了xgboost工具的R语言接口提交到了CRAN上,也有用户将其封装成了 julia库。
2)、xgboost通过如下的优化使得效率大幅提高:
①xgboost借助OpenMP ,能自动利用单机CPU的多核进行并行计算。需要注意的是,Mac上的Clang对OpenMP的支持较差,所以默认情况下只能单核运行。
②xgboost自定义了一个数据矩阵类DMatrix,会在训练开始时进行一遍预处理,从而提高之后每次迭代的效率。
3)、xgboost特点:速度快,效果好,功能多。
①XGB 优势
添加复杂度控制和后期剪枝防止过拟合;
对于loss function 具有通用性,只需求一阶二阶导数;
知道每个样本分到哪片叶子上,可提高模型表现;
可以使用线性模型代替树模型,从而得到L1+L2 的线性或逻辑回归。
① 分布式应用:XGB 直接在YARN 上使用、集成进现有Spark 机器学习工具。