Adaboost算法

Adaboost算法

Adaboost概述

  • 集成学习(Ensemble learning)就是将若⼲个弱分类器通过⼀定的策略组合之后产⽣⼀个强分类器,是时下⾮常流⾏的机器学习算法,它本身不是⼀个单独的机器学习算法,⽽是通过在数据上构建并结合多个机器学习器来完成学习任务,也就是我们常说的 “博采众⻓”

  • 基本上所有的机器学习领域都可以看到集成学习的身影,在现实中集成学习也有相当⼤的作⽤,它可以⽤来做市场营销模拟的建模,统计客户来源,保留和流失,也可⽤来预测疾病的⻛险和病患者的易感性。在现在的各种算法竞赛中,随机森林,梯度提升树(GBDT),XGBoost等集成算法的身影也随处可⻅,可⻅其效果之好,应⽤之⼴

  • 我们可以对集成学习的思想做⼀个概括。对于训练集数据,我们通过训练若⼲个「个体学习器」,通过⼀定的结合策略,就可以最终形成⼀个强学习器,已达到博采众⻓的⽬的。

集成算法

我们可以对集成学习的思想做⼀个概括。对于训练集数据,我们通过训练若⼲个「个体学习器」,通过 ⼀定的结合策略,就可以最终形成⼀个强学习器,已达到博采众⻓的⽬的。

image-20220719142132161
集成算法的目标

集成算法会考虑多个评估器的建模结果,汇总之后得到⼀个综合的结果,以此来获取⽐单个模型更好的回归或分类表现。

集成算法种类★

多个模型集成在⼀起的模型叫做集成评估器,组成集成评估器的每个模型都叫做基评估器。

集成算法:装袋法(Bagging)、提升法 (Boosting):

  • bagging⽅法的代表算法是随机森林。
  • Boosting ⽅法的代表算法是Adaboost。

image-20220719142244592

  • 装袋法(Bagging)的核⼼思想是构建多个相互独⽴的评估器,然后对其预测进⾏平均或多数表决原则来决定集成评估器的结果。装袋法的代表模型就是随机森林。
  • 提升法 (Boosting)中,基评估器是相关的,是按顺序⼀⼀构建的。其核⼼思想是结合弱评估器的⼒量⼀次次对难以评估的样本进⾏预测,从⽽构成⼀个强评估器。提升法的代表模型有Adaboost和梯度提升树

解释:

  • 装袋法(Bagging)每一个模型特征与样本随机,模型之间互相独立,互不干扰,决策的时候投票机制,少数服从多数
  • 提升法 (Boosting)中,每一个模型是全量样本进入,构造基分类器,下一个模型里面(也是全量数据进入,但是会加上一个模型的结果),会对上一个模型算错的数据高度重视,算对的会低一点,每个模型都是自己的准确度,准确度越高的模型话语权就会越大,
  • 如果有噪声数据,AdaBoost做出来的效果会非常差,一定要清洗异常数据
Adaboost算法概述
  • AdaBoost,是英文"Adaptive Boosting"(适应增强)的缩写,由 Yoav Freund 和 Robert Schapire在1995年提出。
  • AdaBoost方法的自适应在于:前一个基本分类器分错的样本会得到加强(也就是得到更高的权重),加权后的全体样本再次被用来训练下一个基本分类器
  • AdaBoost对于噪声数据和异常数据很敏感
  • 同时,在每一轮中加一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数,算法停止
  • AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象


Adaboost算法原理

Adaboost算法共3步:

(1)初始化训练数据的权重

如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。

(2)训练弱分类器

具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。

(3)将各个训练得到的弱分类器组合成强分类器

各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

Adaboost构建分类器
image-20220719142615851

f(x) 算出来是一个类概率的东西

Adaboost算法流程

给定一个训练数据集 ,Adaboost的⽬的就是从训练数据中学习一系列弱分类器或基分类器,然后将这些弱分类器组合成⼀个强分类器。

image-20220719142636391

image-20220719142644151

image-20220719142649768

a 是每个模型的权重,e是错误率

image-20220719142654082

image-20220719142659557

Adaboost优缺点

优点
  1. Adaboost是一种有很高精度的分类器
  2. 可以使用各种方法构建子分类器,Adaboost算法提供的是框架
  3. 当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单
  4. 简单,不用做特征筛选
  5. 不用担心overfitting(过度拟合)
缺点
  1. 训练时间过长
  2. 执行效果依赖于弱分类器的选择
  3. 对异常样本敏感,容易受到噪声干扰,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

Adaboost代码实现

导入模块

from sklearn.ensemble import AdaBoostClassifier

AdaBoost分类器

AB = AdaBoostClassifier(n_estimators=1000).fit(x, y)
class sklearn.ensemble.AdaBoostClassifier(
base_estimator=None#基分类器,默认的是随机森林
n_estimators=50#基分类器的个数
learning_rate=1.0#学习率
algorithm='SAMME.R',
random_state=None)
代码参数

base_estimator : 弱分类器,默认为决策树

n_estimators : 基分类器的个数

learning_rate : 学习率 ,默认为1 , 即每个弱学习器的权重缩减系数。对于同样的训练集拟合效果,较小的权重缩减系数意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

algorithm : 可选择{‘SAMME’,‘SAMME.R’},默认是’SAMME.R’

  • SAMME使用了对样本集分类效果作为弱学习器权重,
  • 而SAMME.R使用了对样本集分类的预测概率大小来作为弱学习器权重。要注意的是使用了SAMME.R,则弱分类学习器参数base_estimator必须限制使用支持概率预测的分类器。
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionClassifier

# 导入乳腺癌数据
abc = load_breast_cancer(base_estimator = DecisionClassifier())

dt=DecisionClassifier()
abc = load_breast_cancer(base_estimator = dt)

# 用交叉验证计算得分
score_pre = cross_val_score(abc,data.data,data.target,cv=5).mean()
score_pre

ssifier()
abc = load_breast_cancer(base_estimator = dt)

用交叉验证计算得分

score_pre = cross_val_score(abc,data.data,data.target,cv=5).mean()
score_pre


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值