集成学习系列目录:
集成学习①——集成学习原理、分类和结合方法
集成学习③——Sklearn-Adaboost库参数及实战
一、AdaBoost算法原理
上一偏博客总结过,集成学习基于弱学习器之间是否依赖分为Boosting和Bagging两类, Adaboost就是Boosting中的典型代表。其核心思想是针对同一个训练集训练不同的学习器,然后将这些弱学习器集合起来,构造一个更强的最终学习算法
AdaBoost是英文"Adaptive Boosting"(自适应增强)的缩写,它的自适应在于:基于每一个分类器的误差率,来更新所有样本的权重,前一个分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。
Adaboost算法分为三步:
(1)初始化权值:每一个训练样本最开始权重相同
(2)训练弱分类器:先训练一个弱分类器,计算其误差率(被错误分类的样本权值和),基于误差率降低分类正确的样本权重,提升分类错误的样本权重。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
(3)组合分类器:各个弱分类器的训练过程结束后,依据各分类器的误差率计算各自在最终分类器中的权重,误差率越大,权重越低,就是你说的越对,那么就越听你的,你满嘴跑火车,那就没人听你的了
Adaboost有几个要注意的指标:
① 初始权重:1/训练样本数D
② 误差率: 被分类错误的样本的权重和
③ 弱学习器的权重:
③ 更新训练样本权重:
④最终的分类器
二、Adaboost的python实现
① 构造训练样本
import numpy as np
import matplotlib.pyplot as plt
# 输出样本和类别
def loadsimple():
datMat = np.matrix([[1., 2.1],
[1.5, 1.6],
[1.3, 1.],
[1., 1.],
[2., 1.]])
classlablels = [1.0, 1.0, -1.0, -1.0, 1.0]
return datMat, classla