Adaboost 的基本认识
集成学习的一种
集成学习: 建立多个模型 ,用某种方法, 将多个模型联系在一起, 使其输出结果优于单个模型
Adaboost算法:
建立多个弱分类器,给每个弱分类器赋予权重,将这些弱分类器结合在一起得到一个强分类器。弱分类器的训练过程是串行的,上一个弱分类器训练完成后才能进行下一个弱分类器的训练。在每个弱分类器的训练过程中,需要关注上一个弱分类器分类错误的样本点。用当前训练的弱分类器来弥补上一个弱分类器分类结果的不足。
Adaboost 的推导
首先假设有一个弱分类器h(x),它的输出值非1即-1,Adaboost的思路是把很多弱分类器的结果加起来后取均值。
公式如下
其中H(x)是一个强分类器,t是弱分类器的个数。 上面式子的意思是,对弱分类器的输出值求和并取sign
但我们发现,只是求和少了点什么,要对每个弱分类器赋予不同的权重
α指的是第t个弱分类器的权重
问题来了,新的弱分类器如何划分的呢?弱分类器是串行产生的。 在Adaboost里每个弱分类器关注的是前面弱分类器中划分错误的样本,弥补前面弱分类器的不足
假设现有数据样本,其中y_i取值 1和-1. N是样本的个数,x是数据样本的特征值 该任务要解决的是二分类问题。
怎样能让弱分类器知道,需要关注哪些数据样本呢? 需要给每一个数据样本赋予一个权重。
首先定能够与样本x_i在第t个弱分类器上的权重为
在构建第一个弱分类器时,首先初始化,令所有数据点的权重相同。
即
引入变量“错误率”
初始化的以一个弱分类器,比如有100个样本点,错分了40个,那么=0.4。错误率取值在0 1 之间
初始化的可以表示为
因为
将w_i^t 带入 得出
因为前面说过,下一个弱分类器的划分依据是根据上一弱分类器中划分错误的样本点决定的。现在已经定义了错误率这一概念,接下来错误率如何影响下一弱分类器的划分呢。通过重点关注上一弱分类器中错分样本实现。
公式
Z是归一化因子,因为想要w_i和为1.
α前面定义了, 是对每个弱分类器赋予的权重,介于0 1 之间
这部分表示 预测正确时取1, 预测错误取-1
上面一个是当预测正确时,w_i^{t+1}会变小。 下面那种情况是预测错误,w_i^{t+1} 会变大
定义E,代表所有未归一的权重的和
当错分的样本越多,E越大
化简一下
为了得到α的值,求E对α^t的导数,并令其为0。即求出什么样的α可以让E尽可能的小
解得
将α带入前面的式子就得到了权重w_i^{t+1}
计算步骤
1、初始化权重1/N
2、在第t步,选择可以最小化当前错误率的弱分类器,添加这个弱分类器,计算α^t
3、计算新的样本权重
4、回到2 直至收敛
5、得到的模型为
Adaboost的特点
优点
1、所需参数少,易用
2、Adaboost 属于一种思想,旗下的弱分类器可以是任何模型,LR,线性回归等,其中最常用的是决策树
3、可以很方便的进行特征选择。这一特点属于boosting类思想的共性。通过统计训练好的强分类器中的弱分类器是如何选择特征进行分割的来得出每种特征的重要性。
缺点
1、对数据敏感,当数据噪声多时,可能会过拟合
常见问题
1、adaboost 和 gdbt的区别
2、SVM跟AdaBoost有什么联系?想了半天,答了都用于分类问题。。。
面试官提示,SVM仅取决于支持向量,那么AdaBoost呢?AdaBoost更关注之前被分错的样本,所以它们的共同点在于都不是一视同仁的看待所有样本。
3、Adaboost与随机森林原理与区别,适用于什么不同的场景
RF:适合处理多分类问题及类别不平衡的分类问题、对缺失值异常值不敏感、能够有效地处理大的数据集和高维数据集、无须进行特征选择有袋外数据OOB、不用再单独划分交叉验证集、能够给出特征重要性程度、不容易过拟合容易并行化,训练和预测速度快。
Adaboost:对异常值更敏感。Adaboost是一种有很高精度的分类器。可以使用各种方法构建子分类器,Adaboost算法提供的是框架。当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单。简单,不用做特征筛选。不容易发生overfitting。