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

时间:2015-03-22 16:58:59

标签: r tree rpart

我有一个来自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是修剪树时的重点吗? 当我们总结决策树分类器的错误时,错误是0.99231还是1.0031?

2 个答案:

答案 0 :(得分:12)

x-error是交叉验证错误(rpart具有内置交叉验证)。您可以同时使用3列,rel_error,xerror和xstd来帮助您选择修剪树的位置。

每行代表树的不同高度。通常,树中的更多级别意味着它在训练中具有较低的分类错误。但是,您存在过度拟合的风险。通常,交叉验证错误实际上会随着树获得更多级别而增加(至少在最佳&#39;级别之后)。

经验法则是选择rel_error + xstd < xerror所在的最低级别。

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

另请参阅here

答案 1 :(得分:5)

我想在@Harold Ship的回答中添加一些信息。实际上,有三种方法可以选择最佳的cp值进行修剪:

  1. 使用最小xerror的第一级(即最少nsplit)。当有多个级别具有相同的最小xerror时,第一级仅启动。这是最常用的方法。

  2. 使用xerror落入min(xerror)的±1 xstd范围的第一级,即xerror&lt; min(xerror)+ xstd,xerror等于或低于水平线的级别。该方法考虑了交叉验证产生的xerror的可变性。

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

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