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


回答:

你已经使用了最小交叉验证误差的决策树。另一种方法是选择最小的决策树,其误差在最佳决策树(你选择的那个)的1个标准误差范围内。这样做的原因是,根据交叉验证估计的误差,最小的决策树在1个标准误差范围内与最佳(最低交叉验证误差)的决策树预测效果相当,但它使用了更少的“项”。

通过以下代码绘制未修剪决策树的成本复杂度与树大小图:

plotcp(tree)

找到位于最小误差决策树左侧,且其cp值在最小误差决策树误差范围内的决策树。

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注