R baging和boosting比较

简介: R baging和boosting比较

在上一章节,博主介绍了baging和boosting的原理
本章主要讲解R代码

1 R准备工作

R中的adabag包均有函数实现bagging和adaboost的分类建模(另外,ipred包中的bagging()函数可以实现bagging回归)。第一题就利用adabag包实现bagging和adaboost建模,并根据预测结果选择最优模型。

a) 为了描述这两种方式,先利用全部数据建立模型:

利用boosting()(原来的adaboost.M1()函数)建立adaboost分类

install.packages("adabag")
library(adabag)

2 全数据测试

直接使用R自带的iris数据集进行boosting建模测验,boosting会重视分类良好的分类器和关注分错的数据,逐步学习变成强分类器

a=boosting(Species~.,data=iris) #建立adaboost分类模型
(z0=table(iris[,5],predict(a,iris)$class))  #查看模型的预测结果
#模型的预测结果全部正确。
(E0=(sum(z0)-sum(diag(z0)))/sum(z0))        #计算误差率
#[1] 0
#从结果看,预测的误差率为0。
barplot(a$importance)                       #画出变量重要性图

#上图可以得知,各变量的重要性分别为:Petal.Length>Petal.Width>Sepal.Length>Sepal.Width
b<-errorevol(a,iris)                       #计算全体的误差演变
plot(b$error,type="l",main="AdaBoost error vs number of trees") #对误差演变进行画图

重要性图
在这里插入图片描述
残差在迭代后的变化趋势
在这里插入图片描述

上图可以得知,在第七次迭代后误差率就达到零了,实现预测零误差率。

$接下来,利用bagging()函数建立bagging分类模型:

b=bagging(Species~.,data=iris) #建立bagging分类模型
(z0=table(iris[,5],predict(b,iris)$class)) #查看模型的预测结果

bagging测试
在这里插入图片描述

#可以看出,bangging分类将1个Versicolor误分为Virginica,将3个Virginica误分为Versicolor。
(E0=(sum(z0)-sum(diag(z0)))/sum(z0))        #计算误差率
#[1] 0.02666667
#误差率为0.027。
barplot(b$importance) 

在这里插入图片描述
上图可以得知,各变量的重要性分别为:Petal.Length>Petal.Width>Sepal.Length>Sepal.Width
在全量建模的情况下,对比bagging和adaboost分类,adaboost分类的精确度高达100%,明显优于bagging分类。

下面再做5折交叉验证,这里仅给出训练集和测试集的分类平均误差率:

3 交叉验证比较

利用boosting()(原来的adaboost.M1()函数)建立adaboost分类

set.seed(1044) #设定随机种子
samp=c(sample(1:50,25),sample(51:100,25),sample(101:150,25)) #进行随机抽样
a=boosting(Species~.,data=iris[samp,]) #利用训练集建立adaboost分类模
(z0=table(iris[-samp,5],predict(a,iris[-samp,])$class))
(E0=(sum(z0)-sum(diag(z0)))/sum(z0))

从结果看,训练集的预测结果是100%正确,测试集的误差率是0.02666667,有1个实际为Versicolor误分为Virginica,1个Virginica误分为Versicolor

在这里插入图片描述

接下来,利用bagging()函数建立bagging分类模型:

  b=bagging(Species~.,data=iris[samp,])  #利用训练集建立bagging分类模型
  (z0=table(iris[-samp,5],predict(b,iris[-samp,])$class)) 
  (E0=(sum(z0)-sum(diag(z0)))/sum(z0)) 

Bagging对训练集的预测结果有2个实际为Virginica的误分为Versicolor,误差率为0.027,对测试集的预测结果有2个实际为Versicolor的误分类为Virginica,有2个实际为Virginica的误分为Versicolor,误差率为0.053。

boosting比bagging好并不是绝对的,随机样本的改变会发生变化

#总结:从以上的预测结果对比得知,对于鸢尾花数据集,adabag分类的效果明显优于bagging分类。

目录
相关文章
|
6月前
|
机器学习/深度学习 数据采集 存储
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
**摘要:** 这篇文章介绍了决策树作为一种机器学习算法,用于分类和回归问题,通过一系列特征测试将复杂决策过程简化。文章详细阐述了决策树的定义、构建方法、剪枝优化技术,以及优缺点。接着,文章讨论了集成学习,包括Bagging、Boosting和随机森林等方法,解释了它们的工作原理、优缺点以及如何通过结合多个模型提高性能和泛化能力。文中特别提到了随机森林和GBDT(XGBoost)作为集成方法的实例,强调了它们在处理复杂数据和防止过拟合方面的优势。最后,文章提供了选择集成学习算法的指南,考虑了数据特性、模型性能、计算资源和过拟合风险等因素。
84 0
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
|
7月前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
91 0
|
机器学习/深度学习 算法
集成学习:Bagging Boosting&Stacking (一)
集成学习:Bagging Boosting&Stacking (一)
117 0
|
数据处理 知识图谱 iOS开发
集成学习:Bagging Boosting&Stacking (二)
集成学习:Bagging Boosting&Stacking (二)
113 0
|
机器学习/深度学习 算法 Python
机器学习算法之——梯度提升(Gradient Boosting)上
由于每个子模型要使用全部的数据集进行训练,因此 Ada Boosting 算法中没有 oob 数据集,在使用 Ada Boosting 算法前,需要划分数据集:train_test_split;
机器学习算法之——梯度提升(Gradient Boosting)上
|
机器学习/深度学习 算法
机器学习算法之——梯度提升(Gradient Boosting)下
GDBT本身并不复杂,不过要吃透的话需要对集成学习的原理、策树原理和各种损失函树有一定的了解。由于GBDT的卓越性能,只要是研究机器学习都应该掌握这个算法,包括背后的原理和应用调参方法。目前GBDT的算法比较好的库是xgboost。当然scikit-learn也可以。
机器学习算法之——梯度提升(Gradient Boosting)下
|
机器学习/深度学习 算法 前端开发
集成学习之随机森林、Adaboost、Gradient Boosting、XGBoost原理及使用
集成学习之随机森林、Adaboost、Gradient Boosting、XGBoost原理及使用
512 0
集成学习之随机森林、Adaboost、Gradient Boosting、XGBoost原理及使用
|
机器学习/深度学习 算法 前端开发
Machine Learning-L12-集成学习:Boosting/Bagging/随机森林
Machine Learning-L12-集成学习:Boosting/Bagging/随机森林
Machine Learning-L12-集成学习:Boosting/Bagging/随机森林
|
机器学习/深度学习 算法
集成学习之GBDT
GBDT、Treelink、 GBRT(Gradient Boost Regression Tree)、Tree Net、MART(Multiple Additive Regression Tree)算法都是以决策树为基分类器的集成算法,通常由多棵决策树构成,通常是上百棵树且每棵树规模都较小(即树的深度都比较浅)。进行模型预测的时候,对于输入的一个样本实例X,遍历每一棵决策树,每棵树都会对预测值进行调整修正,最后得到预测的结果。假设$F_0$是设置的初值,$T_i$是一颗一颗的决策树。预测结果如下所示:
247 0
集成学习之GBDT