AdaBoost算法(R语言)

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

AdaBoost算法

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

算法流程

step1

N=原数据集大小;

k=提升轮数;
w={所有样本初始权值1/N};
step2
step3

for i=1 to k{
    根据w生成大小为N的自助样本集D[i];
    D[i]上训练一个基分类器C[i];
    C[i]对所有原始样本进行分类;

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

根据权重聚合每轮得到的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,训练比较耗时。

原文发布于微信公众号 - 机器学习养成记(chenchenwings)

原文发表时间:2018-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技大本营的专栏

CNN可视化最新研究方法进展(附结构、算法)

【AI科技大本营导读】深度学习一直被看做是一个难以解释的“黑匣子”。一方面在于其缺乏数学上的优雅,缺乏基础理论的支撑,另一方面在工程上缺乏解释性,其潜在的安全隐...

1914
来自专栏机器学习、深度学习

人群计数--Cross-scene Crowd Counting via Deep Convolutional Neural Networks

Cross-scene Crowd Counting via Deep Convolutional Neural Networks CVPR2015 本文主...

3416
来自专栏目标检测和深度学习

FAIR何恺明等人提出组归一化:替代批归一化,不受批量大小限制

选自arXiv 作者:吴育昕、何恺明 机器之心编译 自 Facebook 在 2017 年 6 月发布 1 小时训练 ImageNet 论文以来,很多研究者都在...

3057
来自专栏智能算法

机器学习算法比较

来自:D.W's Notes - Machine Learning 作者:刘帝伟 链接:http://www.csuldw.com/2016/02/26/201...

38812
来自专栏华章科技

机器学习算法比较

机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验。通常最开始...

1213
来自专栏专知

迁移学习在深度学习中的应用

▌简介 ---- 迁移学习是一种机器学习方法,其中为一个任务开发的模型可以在另一个任务中重用。 迁移学习是深度学习中的一种流行方法,其中预训练(pre-trai...

2995
来自专栏机器之心

FAIR何恺明等人提出组归一化:替代批归一化,不受批量大小限制

选自arXiv 作者:吴育昕、何恺明 机器之心编译 自 Facebook 在 2017 年 6 月发布 1 小时训练 ImageNet 论文以来,很多研究者都在...

3726
来自专栏CSDN技术头条

逻辑回归、决策树和支持向量机(I)

分类问题是我们在各个行业的商业业务中遇到的主要问题之一。在本文中,我们将从众多技术中挑选出三种主要技术展开讨论,逻辑回归(Logistic Regression...

2286
来自专栏机器之心

这是一份优美的信息图,吴恩达点赞的deeplearning.ai课程总结

机器之心整理 参与:思源、刘晓坤 吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息图,这套信息图优美地记录了深度学习课程的知识...

3756
来自专栏机器之心

学界 | 李飞飞等人提出MentorNet:让深度神经网络克服大数据中的噪声

5434

扫码关注云+社区

领取腾讯云代金券