Bagging算法(R语言)

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

Bagging算法

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

算法流程

step1
k=自助样本集个数
N=原数据集大小
step2
step3
for i=1 to k{
    生成大小为N的自助样本集D[i]
    D[i]上训练一个基分类器C[i]
}
计算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对基分类器性能可能没有显著改善,甚至会降低。

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

原文发表时间:2017-12-29

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏计算机视觉战队

经典的全连接前馈神经网络与BP

神经网络分类: ? 机器学习的四要素 ? 讨论:线性模型与广义线性模型 对于部分数据来说,其本身就是稀疏,可以通过线性模型直接优化求解,但是实际生活中大多...

4645
来自专栏计算机视觉战队

DeepLab v2及调试过程

今天我们开始说说语义分割第二个系列,DeepLab V2。说这个之前,我们先说说FCN的一些简单知识。 图像语义分割,简单而言就是给定一张图片,对图片上的每一个...

4496
来自专栏开心的学习之路

神经网络体系搭建(三)——卷积神经网络

本篇是神经网络体系搭建的第三篇,解决体系搭建的卷积神经网络相关问题,详见神经网络体系搭建(序) 卷积神经网络(CNN) ? CNN是什么 卷积神经网络是一种空间...

3798
来自专栏深度学习与数据挖掘实战

【机器学习理论】为什么L1稀疏,L2平滑?

使用机器学习方法解决实际问题时,我们通常要用L1或L2范数做正则化(regularization),从而限制权值大小,减少过拟合风险。特别是在使用梯度...

1091
来自专栏梦里茶室

读论文系列:Object Detection ICCV2015 Fast RCNN

Fast RCNN是对RCNN的性能优化版本,在VGG16上,Fast R-CNN训练速度是RCNN的9倍, 测试速度是RCNN213倍;训练速度是SPP-ne...

3676
来自专栏IT派

推荐|数据科学家需要了解的5大聚类算法

IT派 - {技术青年圈} 持续关注互联网、大数据、人工智能领域 聚类是一种涉及数据点分组的机器学习技术。给定一个数据点集,则可利用聚类算法将每个数据点分类...

3207
来自专栏老秦求学

Keras实现风格迁移

风格迁移算法经历多次定义和更新,现在应用在许多智能手机APP上。 风格迁移在保留目标图片内容的基础上,将图片风格引用在目标图片上。

3704
来自专栏超然的博客

MIT-线性代数笔记(1-6)

  对方程组中某个方程进行时的那个的数乘和加减,将某一未知系数变为零,来削弱未知数个数

1232
来自专栏ACM算法日常

第九篇:《机器学习之神经网络(实战篇)》

812
来自专栏量子位

一文了解各种卷积结构原理及优劣

王小新 编译自 Medium 量子位 出品 | 公众号 QbitAI 卷积神经网络作为深度学习的典型网络,在图像处理和计算机视觉等多个领域都取得了很好的效果。 ...

3726

扫码关注云+社区