13

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

4

1 回答 1

16

您已使用最小交叉验证错误树。另一种方法是使用在最佳树(您正在选择的树)的 1 个标准误差内的最小树。这样做的原因是,考虑到误差的 CV 估计,1 个标准误差内的最小树在预测方面的表现与最好的(最低 CV 误差)树一样好,但它用更少的“术语”来做到这一点”。

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

plotcp(tree)

找到误差最小的树左侧的树,其 cp 值位于误差最小的树的误差条内。

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

于 2013-03-10T03:22:00.677 回答