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
data
#divide data into training and test sets
set.seed(210)
index
train
test
用bagging()函数对训练集进行训练。首先定义基分类器个数为1,通过循环依次增加基分类器个数,直至达到20。基分类器个数通过bagging()中的mfinal参数进行设置。
#Bagging algorithm with different numbers of classifiers
error
for(i in 1:20){
data.bagging
data.predbagging
error[i]
}
对于预测后的结果data.predbagging,输入data.predbagging$confusion可以看到预测值与真实结果的混淆矩阵,输入data.predbagging$error可以看到预测误差。下面,用ggplot2画出误差随基分类器个数变化图像。
error
p
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对基分类器性能可能没有显著改善,甚至会降低。
领取专属 10元无门槛券
私享最新 技术干货