如何在R中修剪一棵树?

Posted

技术标签:

【中文标题】如何在R中修剪一棵树?【英文标题】:How to prune a tree in R? 【发布时间】:2013-02-25 10:31:34 【问题描述】:

我正在使用 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】:

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

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

plotcp(tree)

找到误差最小的那棵树的左边,它的cp值在误差最小的那棵树的误差范围内。

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

【讨论】:

以上是关于如何在R中修剪一棵树?的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode——修剪二叉搜索树

[LeetCode] Trim a Binary Search Tree 修剪一棵二叉树

如何在javascript中验证之前修剪非必填字段

如何在修剪其中一列的结果时选择所有列?

如何修剪 std::string?

如何在颤动中制作音频修剪小部件