我正在R中使用rpart进行分类。树模型受以下训练:

> tree <- rpart(activity ~ . , data=trainData)
> pData1 <- predict(tree, testData, type="class")


该树模型的准确性为:

> sum(testData$activity==pData1)/length(pData1)
[1] 0.8094276


我阅读了tutorial以通过交叉验证来修剪树:

> ptree <- prune(tree,cp=tree$cptable[which.min(tree$cptable[,"xerror"]),"CP"])
> pData2 <- predict(ptree, testData, type="class")


修剪的树的准确率仍然相同:

> sum(testData$activity==pData2)/length(pData2)
[1] 0.8094276


我想知道修剪的树怎么了?以及如何在R中使用交叉验证来修剪树模型?谢谢。

最佳答案

您已使用最小的交叉验证错误树。另一种选择是使用与最佳树(您选择的树)的1个标准误差内的最小树。原因是,鉴于CV估计的误差,在1个标准误差内的最小树与最佳(最低CV误差)树的预测效果一样好,但是用更少的“项”来完成”。

通过以下方式绘制未修剪树的成本复杂度与树大小的关系:

plotcp(tree)


找到误差最小的一棵树的左侧,其cp值位于误差最小的一棵树的错误栏中。

修剪不影响拟合树的原因可能有很多。例如,最佳树可能是算法根据?rpart.control中指定的停止规则停止的树。

07-24 09:52
查看更多