AdaBoost算法(R语言)

作者: 三猫后端 | 来源:发表于2018-01-06 18:29 被阅读185次

原文链接:AdaBoost算法(R语言)

微信公众号:机器学习养成记    搜索添加微信公众号:chenchenwings


Boost算法是根据Valiant提出的PAC学习模型衍生得到,是一种可以自适应的改变训练样本的分布,从而使得基分类器聚焦在特殊样本的迭代方法。从基本的Boost算法原理,发展了很多不同的提升算法,如AdaBoost,Gradient Boosting等,本文着重介绍AdaBoost算法。

AdaBoost算法

与Bagging算法(R语言)不同的是,AdaBoost给每一个训练样本赋予一个权值,并且可以在每次提升后,自动调整权值。在从原始数据集抽取自助样本集时,权值可以影响抽样分布。并且此算法对每个基分类器进行加权,而不是使用投票的方式得到最终结果。

算法流程

step1    N=原数据集大小;

             k=提升轮数;

             w={所有样本初始权值1/N};

step2    for i=1 to k{   

            根据w生成大小为N的自助样本集D[i];   

            D[i]上训练一个基分类器C[i];   

            C[i]对所有原始样本进行分类;   

            增加错误分类样本权值,减小争取分    类样本权值,得到新的w;}

step3    根据权重聚合每轮得到的C[i],得到最终组合分类器;

不同提升算法的差别主要在于:(1)每轮提升后如何修改样本权值;(2)如何聚合基分类器得到最终分类器。Gradient Boosting算法是通过在迭代时,使损失函数在梯度方向上下降,来保证最好的效果。

R语言实现

adabag包中的boosting()函数可以实现AdaBoost算法,此函数中选取的基分类器为分类树。选取线性分类器与性能评价(R语言)中的数据来进行AdaBoost算法的实例演示,并展示了基分类器个数与误差变化关系图。

导入包与数据,以7:3比例将数据分为训练集与测试集。

library(adabag)

library(ggplot2)

target.url <- 'https://archive.ics.uci.edu/ml/machine-learning-databases/undocumented/connectionist-bench/sonar/sonar.all-data'

data <- read.csv(target.url,header = F)

#divide data into training and test sets

set.seed(1500)

index <- sample(nrow(data),0.7*nrow(data))

train <- data[index,]

test <- data[-index,]

用boosting()函数对训练集进行训练。首先定义基分类器个数为1,通过循环依次增加基分类器个数,直至达到20。基分类器个数通过boosting()中的mfinal参数进行设置。

#AdaBoost algorithm with different numbers of classifiers

error <- as.numeric()

for(i in 1:20){

  data.adaboost <- boosting(V61~., data=train, mfinal=i)

  data.pred <- predict.boosting(data.adaboost,newdata = test)

  error[i] <- data.pred$error

}

对于预测后的结果data.pred,输入data.pred$confusion可以看到预测值与真实结果的混淆矩阵,输入data.pred$error可以看到预测误差。下面,用ggplot2画出误差随基分类器个数变化图像。

error <- as.data.frame(error)

p <- ggplot(error,aes(x=1:20,y=error))+

  geom_line(colour="red", linetype="dashed",size = 1)+

  geom_point(size=3, shape=18)+

  ylim(0.13,0.45) +

  xlab("the number of basic classifiers")+

  theme_bw()+

  theme(panel.grid = element_blank())+

  theme(axis.title = element_text(face = "bold"))

p

图像结果为:

可以看出,随着基分类器增加,误差虽有波动,但有减小趋势,逐渐趋向于0.22左右。

优缺点

1,AdaBoost充分考虑的每个分类器的权重。

2,Boosting通常用于弱学习,即没有分离白噪声的能力。

3,由于倾向于那些被错误分类的样本,Boost技术容易受过拟合影响。

4,训练比较耗时。


推荐文章:

用机器学习更快了解用户(翻译)

k折交叉验证(R语言)

聚类(二):k-means算法(R&python)

小案例(一):商业街抽奖

小案例(二):面包是不是变轻了

小案例(三):调查问卷

小案例(四):销售额下滑

微信公众号:机器学习养成记    搜索添加微信公众号:chenchenwings

扫描二维码,关注我们。

如需转载,请在开篇显著位置注明作者和出处,并在文末放置机器学习养成记二维码和添加原文链接。

快来关注我们吧!

相关文章

  • AdaBoost算法(R语言)

    原文链接:AdaBoost算法(R语言) 微信公众号:机器学习养成记 搜索添加微信公众号:chenchenwin...

  • 提升方法

    提升方法 提升方法 AdaBoost 算法 AdaBoost算法的训练误差分析 AdaBoost算法的解释 提升树...

  • 第8章 Adaboost算法

    内容 一、Adaboost简介 二、Adaboost算法过程 三、Adaboost算法的训练误差分析 四、Adab...

  • 集成算法整理

    一.AdaBoost的算法 在学习adaboost算法前先要弄清楚前向分布算法,因为AdaBoost是前向分布加法...

  • Adaboost算法简介

    Adaboost算法 Adaboost算法是一种有监督的学习方法,是基于Adaboost算法的分类器把若干个分类器...

  • 4. AdaBoost 自适应推进

    1.名词解释 Boost(推进),adaboost(adapt boost)自适应推进算法:Adaboost算法是...

  • GBDT集成算法(梯度提升树)

    一、算法思想 GBDT是集成学习Boosting算法中的一种,它与Adaboost相比,Adaboost算法利用...

  • 04 集成学习 - Boosting - AdaBoost算法构

    03 集成学习 - Boosting - AdaBoost算法原理 十、AdaBoost算法构建 上一章最后说明了...

  • R 集成算法① adaboost

    集成算法 集成算法(Ensemble method) 是目前数据科学家工具箱的一种重要补充。这个工具非常流行,目前...

  • adaboost和xgboost的区别和联系

    机器学习算法中GBDT与Adaboost的区别与联系是什么? Adaboost Adaboost是模型为加法模型,...

网友评论

    本文标题:AdaBoost算法(R语言)

    本文链接:https://www.haomeiwen.com/subject/eyaynxtx.html