我在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中使用交叉验证来修剪树模型?感谢。
答案 0 :(得分:14)
您使用了最小的交叉验证错误树。另一种方法是使用最佳树(您选择的树)的1个标准误差范围内的最小树。这样做的原因是,给定错误的CV估计值,1个标准误差中的最小树在预测中的表现与最佳(最低CV误差)树一样好,但它使用较少的“术语” ”
通过以下方式绘制 un -pruned树的成本复杂度与树大小:
plotcp(tree)
找到最小错误的树左侧的树,其cp值位于错误条最小的错误条中。
修剪不影响拟合树的原因可能有很多。例如,最佳树可以是根据?rpart.control
中指定的停止规则停止算法的树。