rpart决策树中rel error和x error有什么区别?

7
我有一个来自UCI机器学习数据库的纯分类数据框。https://archive.ics.uci.edu/ml/datasets/Diabetes+130-US+hospitals+for+years+1999-2008 我正在使用rpart根据新的类别(患者是否在30天内返回,即新的失败类别)形成决策树。
我正在使用以下参数进行决策树:
    tree_model <- rpart(Failed ~ race + gender + age+ time_in_hospital+ medical_specialty + num_lab_procedures+ num_procedures+num_medications+number_outpatient+number_emergency+number_inpatient+number_diagnoses+max_glu_serum+ A1Cresult+metformin+glimepiride+glipizide+glyburide+pioglitazone+rosiglitazone+insulin+change,method="class", data=training_data, control=rpart.control(minsplit=2, cp=0.0001, maxdepth=20, xval = 10), parms = list(split = "gini"))

打印结果如下:
       CP     nsplit rel error  xerror     xstd
1 0.00065883      0   1.00000  1.0000   0.018518
2 0.00057648      8   0.99424  1.0038   0.018549
3 0.00025621     10   0.99308  1.0031   0.018543
4 0.00020000     13   0.99231  1.0031   0.018543

我看到随着决策树的分支,相对误差在下降,但xerror在上升 - 我不理解为什么误差会随着树的复杂度增加而减少。

我认为xerror最重要,因为大多数剪枝方法都会从根节点开始剪枝。

为什么在修剪树时要关注xerror?当我们总结决策树分类器的误差时,误差是0.99231还是1.0031?


这是一个概念性的问题,不是编码问题。你应该找一个相关主题的论坛,比如CrossValidated.com。 - IRTFM
2
我投票关闭此问题,因为它不属于根据[帮助中心]定义的编程范畴,而是涉及到机器学习理论和/或方法 - 请查看https://stackoverflow.com/tags/machine-learning/info中的介绍和注意事项。 - desertnaut
2个回答

14

x-error 是交叉验证误差(rpart 内置了交叉验证)。您可以使用3列 rel_error、xerror 和 xstd 来帮助选择在哪里修剪决策树。

每一行代表树的不同高度。通常,树中的层数越多,训练分类误差就越低。然而,这也会增加过拟合的风险。通常情况下,随着树的层数增加(至少是“最优”层之后),交叉验证误差实际上会增加。

一个经验法则是选择 rel_error + xstd < xerror最低层作为修剪决策树的位置。

如果在输出上运行 plotcp,它还将显示修剪决策树的最佳位置。

此外,请参阅 SO 主题 如何从决策树计算错误率?


你有计算rel_error的显式公式吗?或者如果你有相关链接,请告诉我。 - cloudscomputes

9
我想在@Harold Ship的回答中添加一些信息。实际上,有三种方法可以选择用于修剪的最佳cp值:
  1. 使用第一级别(即最少nsplit)的最小xerror。当有多个级别具有相同的最小xerror时,第一级别才会发挥作用。这是最常用的方法。
  2. 使用xerror落入min(xerror)±1 xstd范围内的第一级别,即xerror < min(xerror)+ xstd的级别,其xerror位于或低于水平线。此方法考虑了交叉验证产生的xerror的可变性。

    注意:不应在修剪中使用rel_error。

  3. (很少使用的方法)使用xerror ± xstd重叠于min(xerror)± xstd的第一级别。即,下限在或低于水平线的级别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接