如何在R中修剪树?

时间:2013-03-10 03:00:56

标签: r machine-learning decision-tree rpart

我在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 个答案:

答案 0 :(得分:14)

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

通过以下方式绘制 un -pruned树的成本复杂度与树大小:

plotcp(tree)

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

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