日撸Java三百行:AdaBoost

集成学习通过构建和结合多个学习器提升预测性能,包括同质和异质集成。AdaBoost作为一种典型的Boosting方法,通过迭代训练弱分类器,重点关注误分类样本,逐步调整样本权重以构建强分类器。每个分类器的权重基于其在训练中的表现,最终通过加权求和得出结果。AdaBoost算法包括初始化权重、训练分类器、调整权重和迭代等步骤,直至达到预设的错误率或分类器数量。
摘要由CSDN通过智能技术生成

集成学习

集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier svstem).一般结构:先产生一组“个体学习器”(individual learner),再用某种策略将它们结合起来.个体学习器通常由一个现有的学习算法从训练数据产生.例如决策树算法、BP神经网络算法等,
“同质”(homogeneous)集成:集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络.同质集成中的个体学习器亦称“基学习器”,相应的学习算法称为“基学习算法”(base learning algorithm).
“异质”(heterogenous)集成:集成中包含不同类型的个体学习器,例如同时包含决策树和神经网络,个体学习器一般不称为基学习器,常称为“组件学习器”.

学习器的选择:集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能.这对“弱学习器”尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的.但需注意的是,虽然从理论上来说使用弱学习器集成足以获得好的性能,但在实践中出于种种考虑,往往会使用比较强的学习器.
要获得好的集成,个体学习器应“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太坏,并且要有“多样性”.即学习器间具有差异.个体学习器的“准确性”和“多样性”本身就存在冲突.一般的,准确性很高之后,要增加多样性就需牺牲准确性.事实上,如何产生并结合“好而不同”的个体学习器,是集成学习研究的核心.

分类:根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类,即a)个体学习器间存在强依赖关系、必须串行生成的序列化方法,以及b)个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging 和Random Forest.

Boosting

boosting中不同的分类器是通过串行训练而获得的,每个新分类器都根据已训练出的分类器的性能来进行训练。boosting是通过集中关注被已有分类器错分的那些数据来获得新的分类器。由于boosting分类的结果是基于所有分类器的加权求和结果的,且分类器权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。boosting方法拥有多个版本,其中最流行的版本AdaBoost。

AdaBoost

AdaBoost是英文"Adaptive Boosting"(自适应增强)的缩写,AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上。

AdaBoost的运行过程:
(1)训练数据中的每个样本,并赋予其一个权重,这些权重构成了向量 D D D ,一开始这些权重都初始化成相等值
(2)首先在训练数据上训练出一个弱分类器并计算该分类器的错误率,然后在同一数据集上再次训练弱分类器。
(3)在分类器的第二次训练当中,将会重新调整每个样本的权重,其中第一次分对的样本的
权重将会降低,而第一次分错的样本的权重将会提高.
为了从所有弱分类器中得到最终的分类结果,AdaBoost为每个分类器都分配了一个权重值 α \alpha α, 这些 α \alpha α值是基干每个弱分类器的错误
率进行计算的。其中,错误率 ε \varepsilon ε的定义为:
ε = 未 分 类 正 确 样 本 数 目 所 有 样 本 数 目 \varepsilon=\frac{未分类正确样本数目}{所有样本数目} ε=
α = 1 2 l n ( 1 − ε ε ) \alpha=\frac{1}{2}ln(\frac{1-\varepsilon}{\varepsilon}) α=21ln(ε1ε)
在这里插入图片描述
上图中左边是数据集,直方图的不同宽度代表每个样例的不同权重。经过一个分类器之后,加权的预测结果通过三角形中的 α \alpha α值进行加权。每个三角形中的输出的加权结果在圆形中求和,得到最后的结果。

(4)计算出alpha之后,对权重向量D进行更新,以使得那些正确分类的样本的权重降低而错分样本的权重升高:
如果某个样本被正确分类:
D i t + 1 = D i t e − α S u m ( D ) D_i^{t+1}=\frac{D_i^te^{-\alpha}}{Sum(D)} Dit+1=Sum(D)Diteα
如果某个样本被分错:
D i t + 1 = D i t e α S u m ( D ) D_i^{t+1}=\frac{D_i^te^{\alpha}}{Sum(D)} Dit+1=Sum(D)Diteα

(5)计算出D之后,AdaBoost又开始进入下一轮迭代。AdaBoost算法会不断地重复训练和调整权重的过程,直到训练错误率为0或者弱分类器的数目达到用户的指定值为止。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier

# 1. 加载数据集
iris = load_iris()
X = iris.data  # 数据
y = iris.target  # 标签

# 2. 划分数据集
X_trainer, X_test, Y_trainer, Y_test = train_test_split(X, y, test_size=0.2)

# 3. AdaBoostClassifier
clf = AdaBoostClassifier()
clf.fit(X_trainer, Y_trainer)
score = clf.score(X_test, Y_test)  # 模型得分
print("模型得分:", score)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值