bagging 是bootstrap aggregating的缩写,是第一批用于多分类集成算法。
bagging算法如下:
循环k次,每次都从样本集d中有放回地抽取样本集di,这样总共得到k个样本集,用这k个样本集进行决策树生成,获得k个决策树模型,再将要检测的数据用这k个决策树模型进行多数表决,获得票数多的结论。
这种思想跟现代民主投票制度如出一辙,一个人再厉害,判断力也是有限的,但是把一群人聚合在一起投票,那单个人所犯错误的概率就会被抵消,最后得出结论的正确性会明显优于单个人做出决策。
个人认为其算法倒是并不复杂,主要还是内部决策树的实现。r语言提供了很强大的包实现该算法。r语言中用于bagging算法实现的是ipred包。
1、首先安装ipred包。这个不复杂,就不介绍了(如果这个不会,还是先从头开始学习r吧)
2、谷歌的结果好像不是很理想,所以安装完之后还是查看下帮助文档吧。 命令:help(package=”ipred”),找到bagging函数的使用
3、可以看到bagging函数有多种调用方式
由于本示例使用的是iris数据集,显然对应最后一种调用方式。
formula是数据模型,我们这边应变量是species,所以数据模型就是species~.了。
data就是所需数据集,这里是鸢尾花数据集iris
subset写着是可选参数(我也没看明白是啥参数,囧)
na.action=na.rpart 这个应该是指遇到空值或者异常值的处理办法,默认是rpart。想来也不用管那么多了
好了,调用下看看
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIxgjMwUTNzQTMzEjNwQTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
model.bagging <- bagging(species~.,data=iris) 这句就是根据语法说明写的,后面两句一般照抄就可以了,具体含义不在这里解释。
最终输出的是表格形式的,纵向表示三种花种的真实属类,横向表示采用决策树之后的预测属类。可以看到100%分类正确。
下图是用cart树做的预测结果,可以看到versicolor有5个归类错误,virginica一个归类错误,bagging完胜单独决策树