决策树的改进--组合预测模型:bagging

基本思想
通过Bootstrap抽样(0.632自举法),对样本量为n的样本,做k次有放回重复抽样,得到k个样本容量仍为n的随机样本Si,基于样本Si,建立k棵分类回归树,即k个预测模型。
对于分类问题,采用k个预测模型“投票”和“少数服从多数”的原则。哪个类别“得票”最多,就预测为哪个类别。对于回归问题,以k个预测模型给出的预测值的平均值作为最终的预测值。
若令k个预测模型为所有观测投票预测,总有部分观测参与建模,会导致预测误差的估计偏乐观。一般采用基于袋外(Out Of Bag,OOB)观测的预测误差。即若第i个观测在建模过程中有q(q<k)次作为OOB观测,则对第i个观测进行预测时应有q个预测模型为其投票,并以得票最高的类别作为其预测类别。
对袋装技术而言,袋外观测的比例大约为36.8%。

下面以R语言分类预测–决策树中的例子的基础上,进行模型优化:

library('ipred')
#袋装技术建立树模型
#coob=TRUE:基于袋外观测计算预测误差;nbagg=25即抽样次数k;control同单棵树参数意义相同
tree_bag <- ipred::bagging(pres92~age+educ+degree+sex, data=df,nbagg=25, coob=TRUE, control=rc )
#使用模型对样本所有观测进行预测
ts2 <- predict(tree_bag, df, type='class')
#计算混淆矩阵
tb2 <- table(df$pres92,ts2)
#计算错判率
t2 <- diag(tb2)
rs2 <-vector()
for(j in 1:3){
  b = 1-t2[j]/sum(tb2[,j])
  rs2 = c(rs2,b) 
};rs2

对角线为预测正确的观测数
这里写图片描述

则此时第1类错判率为0.3168000即(66+132)/(427+66+132),第2类错判率为0.3687500,第3类错判率为0.2928437
这里写图片描述
很明显,整体而言,错判率较单棵数降低10%左右

猜你喜欢

转载自blog.csdn.net/zhouxiuli1001/article/details/82686422