问题 如何在R中修剪树?


我在R中使用rpart进行分类。树模型通过以下方式进行训练:

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

此树模型的准确性为:

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

我读了一个 教程 通过交叉验证来修剪树:

> 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中使用交叉验证修剪树模型?谢谢。


12869
2018-03-10 03:00


起源



答案:


您已使用最小交叉验证的错误树。另一种方法是使用最佳树(您选择的树)的1个标准误差内的最小树。这样做的原因是,给定错误的CV估计值,1个标准误差中的最小树在预测中的效果与最佳(最低CV误差)树一样好,但它使用较少的“术语” ”。

绘制成本复杂度与树的大小 联合国-pruned tree via:

plotcp(tree)

找到具有最小错误的树的左侧的树,其cp值位于具有最小错误的错误条中。

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


13
2018-03-10 03:22