Bagging算法(R语言)

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

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

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


Bagging算法(bootstrap aggregation)由Leo Breiman提出。是一种在每个自助样本集上建立基分类器,通过投票指派得到测试样本最终类别的方法。

Bagging算法

从数据集有放回的随机抽取样本,生成多个自助样本集,每个自助样本集大小与原数据集一致,因此一些样本可能在同一个自助样本集中出现多次。对每个自助样本集训练一个基学习器,常用的基学习器为二元决策树,因为对于有复杂决策边界的问题,二元决策树性能不稳定,这种不稳定可以通过组合多个决策树模型来客服。最终,对于回归问题,结果为基学习器均值,对于分类问题,结果是从不同类别所占的百分比引申出来的各类别概率或均值。

算法流程

step1   k=自助样本集个数;N=原数据集大小

step2  for i=1 to k{

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

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

step3  计算C[i](x)=y,根据投票或概率,得到最终C*(x)值

R语言实现

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

导入包与数据,以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(210)

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

train <- data[index,]

test <- data[-index,]

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

#Bagging algorithm with different numbers of classifiers

error <- as.numeric()

for(i in 1:20){

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

  data.predbagging <- predict.bagging(data.bagging,newdata = test)

  error[i] <- data.predbagging$error

}

对于预测后的结果data.predbagging,输入data.predbagging$confusion可以看到预测值与真实结果的混淆矩阵,输入data.predbagging$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.4) +

  xlab("the number of basic classifiers")+

  theme_bw()+

  theme(panel.grid = element_blank())+

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

p

图像结果为:

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

优缺点

1,Bagging增强了目标函数的表达功能。

2,由于放回抽样每个样本被选中概率相同,Bagging不侧重于训练数据集中的任何特定实例。因此对于噪声数据,不太受过分拟合影响。

3,性能依赖基分类器稳定性,基分类器不稳定,Bagging有助于降低训练数据的随机波导致的误差,如果基分类器稳定,则组合分类器的误差主要为基分类器偏倚所引起的,此时Bagging对基分类器性能可能没有显著改善,甚至会降低。


推荐文章:

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

k折交叉验证(R语言)

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

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

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

小案例(三):调查问卷

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

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

扫描二维码,关注我们。

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

快来关注我们吧!

相关文章

  • Bagging算法(R语言)

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

  • 数据科学35 |机器学习-袋装、随机森林和提升算法

    袋装算法Bagging Bagging算法(Bootstrap aggregating自助聚集算法)是机器学习领域...

  • R 集成算法② bagging

    集成算法 如前文所述,集成算法是目前比较常用的,通过组合弱分类器以达到强分类的效果的方法。其中常见的未套袋法(ba...

  • 【集成学习】boosting-bagging-random fo

    集成学习中三个著名的算法boosting、bagging和random forest. bagging算法使用了重...

  • Bagging与随机森林算法

    1、Bagging (bootstrap aggregating)Bagging即套袋法,其算法过程如下:A)从原...

  • (十五、)bagging算法

    一、bagging、 首先bagging算法是集成学习中两大类算法中的其中一个代表算法,还有另一类的经典算法是Xg...

  • bagging算法

    bagging bagging:bootstrap aggregating的缩写,对训练集合随机抽取样本,每轮的分...

  • bagging 算法

    bagging是将training set抽取T次,每次随机,可能会有重复抽取到值也有可能一次都没抽到。将随机抽取...

  • bagging算法

    首先bagging算法是集成学习中两大类算法中的其中一个代表算法,还有另一类的经典算法是Xgboost。他们主要的...

  • bagging算法

    bagging算法:从原始数据中随机抽取n个样本,重复s次,于是就有个s个训练集,每个训练集都可以训练出一个分类器...

网友评论

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

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