原文出处:http://xccds1977.blogspot.com/2012/11/blog-post_28.html
对比用的数据集是C50包中自带的churn数据,它是用来预测顾客流失的数据集,其中样本量为3333个,变量数为20个 。 为不平衡数据,没有缺失值存在 。 对比基本步骤是用10重交叉检验,将数据随机分为10份,用9份训练决策树,用1份来检验结果。循环后求出10个预测准确度的均值 。 然后在外面再套一个100次大循环,产生三个决策树算法各100个准确率。最后绘制为提琴图,从图中可以观察到C5 . 0的表现最好,而party次之,rpart的效果最差。在本例实验中最大的差距虽然不过0.02,但如果放在kaggle的数据挖掘比赛中,就相当于是一百位名次的差距了。
library (C50) library (rpart ) library (party ) library (reshape2) library (ggplot2 ) data (churn) rate.c <- rate.r <-rate.p<- rep (0,100) for (j in 1:100) { num <- sample (1:10,nrow (churnTrain),replace =T) res.c <- res.r <-res.p<- array (0,dim =c (2,2,10)) for ( i in 1:10) { train <- churnTrain[num!=i, ] test <- churnTrain[num==i, ] model.c <- C5.0(churn~.,data =train) pre <- predict (model.c,test[,-20]) res.c[,,i] <- as.matrix (table (pre,test[ ,20])) model.p <-ctree(churn~.,data =train) pre <- predict (model.p,test[,-20]) res.p[,,i] <- as.matrix (table (pre,test[ ,20])) model.r <- rpart (churn~.,data =train) pre <- predict (model.r,test[,-20],type='class') res.r[,,i] <- as.matrix (table (pre,test[ ,20])) } table.c <- apply (res.c,MARGIN=c (1,2),sum ) rate.c[j] <- sum (diag (table.c))/sum(table.c) table.p <- apply (res.p,MARGIN=c (1,2),sum ) rate.p[j] <- sum (diag (table.p))/sum(table.p) table.r <- apply (res.r,MARGIN=c (1,2),sum ) rate.r[j] <- sum (diag (table.r))/sum(table.r) } data <- data.frame (c50=rate.c,rpart =rate.r,party =rate.p) data.melt <- melt(data ) p <- ggplot (data.melt,aes(variable,value,color=variable)) p + geom_point(position='jitter')+ geom_violin(alpha=0.4)
- 速度显著加快
- 内存使用减少
- 生成树模型更为简洁
- 支持boosting方法
- 支持加权和成本矩阵
- 支持变量筛选