前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R 集成算法① adaboost

R 集成算法① adaboost

作者头像
用户1359560
发布2018-08-27 11:45:33
4420
发布2018-08-27 11:45:33
举报
文章被收录于专栏:生信小驿站生信小驿站

集成算法

集成算法(Ensemble method)

是目前数据科学家工具箱的一种重要补充。这个工具非常流行,目前是许多机器学习比赛参赛者的选择策略。通常是通过一系列分类器,一般是决策树,然后对预测值进行投票。总而言之,集成算法不是挑选一个模型,而是通过一定的方式将多个模型组合起来。其中两个重要方法是套袋法(bagging)和提升法(boosting)。

套袋法和提升法

  • 套袋(Bagging)法:集成中的每个模型投票权重都相同。套袋法利用训练集中随机取出的子集来训练每个模型。这种方法有助于降低方差并有助于避免过拟合。最常见的例子就是随机森林。
  • 提升(Boosting)是一种常用的统计学习方法,在分类问题中,它通过改变训练样本的权重,学习多个分类器(一般是弱分类器),并将这些分类器线性组合,最终提高分类器的性能。Adaboost或者自适应boosting属于Boosting一种,该算法产生于弱分类器来迭代地学习训练集中很大比例的难以分类的样本,对经常分错的样本进行更多的关注(给与更大的权重。)

image

  • 训练过程:

从未加权的数据开始,第一个分类器尝试对结果建模。预测正确的样本出现在下一个分类器的训练集中的可能性较小,相反,难以分类的样本将会出现的更频繁。当下一轮的弱分类器被添加后,他们用来训练后面更难的样本。该过程会持续进行,知道达到要求的总误差或者性能不能提高。这时每个分类器的票数会按照他们在建模数据集上的准确度进行加权。

  • 代码:
代码语言:javascript
复制
setwd("E:\\Rwork")
library(rpart)
library(caret)
library(adabag)
library(ggplot2)
library(ggthemes)
set.seed(123)
data(iris)
index <- sample(nrow(iris),0.75*nrow(iris))
train <- iris[index,]
test <- iris[index,]
error <- as.numeric()
  • 加载包以及划分训练集和测试集
代码语言:javascript
复制
library(tcltk)  
u <- 1:20  
pb <- tkProgressBar("进度","已完成 %", 0, 100)  

for(i in u){
  info<- sprintf("已完成 %d%%", round(i*100/length(u)))  
  setTkProgressBar(pb, i*100/length(u), sprintf("进度 (%s)", info),info)  
  data.adaboost <- boosting(Species ~ ., data=train, mfinal=i)
  data.pred <- predict.boosting(data.adaboost,newdata = test)
  error[i] <- data.pred$error
  }
close(pb)  


##################################################

##################################################

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,0.05) +
     xlab("Classifiers Numbers")

p1 <- p + theme_base()+
      theme(panel.grid = element_blank())+
      theme(axis.title = element_text(face = "bold"))

p1
  • 结果如下:

error分布图

  • 结论: 用boosting()函数对训练集进行训练。首先定义基分类器个数为1,通过循环依次增加基分类器个数,直至达到20通过增加classifiers可以降低error,但是当number增加到一定范围时,error值将会稳定。
代码语言:javascript
复制
iris.adaboost <- boosting(Species ~ ., data=train, mfinal=10)
importanceplot(iris.adaboost)
  • 选取10为mifinal值时,分别显示各变量对模型影响重要性,结果如下:
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 集成算法
    • 套袋法和提升法
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档