一.Boost模型融合:
Boosting算法是一种把若干个分类器整合为一个分类器的方法,如果一个问题存在弱分类器,则可以通过提升的办法得到强分类器,可以用于回归和分类问题。它每一步产生一个弱预测模型(如决策树),并加权累加到总模型中;如果一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升.gbdt和adaboost都是提升树,
二.Adaboost(Adaptive Boosting自适应增强)
自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。它根据每次训练集之中每个样本的分类是否正确,以及每个弱分类器的准确率,来确定每个样本的权值和没额个弱分类器的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。
算法概述:
1、先通过对N个训练样本的学习得到第一个弱分类器;
2、将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器;
3、将第一步和第二步都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器,依次类推。
4、最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。
boosting算法解决两个问题:
1. 如何调整训练集,使得在训练集上训练的弱分类器得以进行:
使用加权后选取的训练数据代替随机选取的训练样本,集中在比较难分的训练数据样本上。
2. 如何将训练得到的各个弱分类器联合起来形成强分类器:
将弱分类器联合起来,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。
具体算法如下:
1.设训练数据集:
T={(x1,y1), (x2,y2)…(xN,yN)}
2.初始化训练数据的权值分布(开始各个分类器权值相同):
3.使用具有权值分布Dm的训练数据集学习,得到基本分类器
4.计算Gm(x)在训练数据集上的分类误差率,(I是指示函数)
5.计算Gm(x)的系数
6.更新训练数据集的权值分布
Zm是规范化因子:
7.构建基本分类器的线性组合
8.得到最终分类器
三.AdaBoost特点:
模型:加法模型。
损失函数:指数函数
算法:前向分步算法。
在给定训练数据及损失函数L(y,f(x))的条件下,学习加法模型f(x)成为经验风险极小化即损失函数极小化问题,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近上式,即:每步只优化损失函数:
样本数据:
对于噪声数据和异常数据很敏感,但不会很容易出现过拟合现象。
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
# Create and fit an AdaBoosted decision tree
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1),
algorithm="SAMME",
n_estimators=200)
四.图形化解释adaboost
假设我们有一个切分二维数据集的若干弱分类器.我们要分类的目标数据集如下:
第一轮:
第二轮:
第三轮:
最终轮: