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?

4

2 回答 2

14

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

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

一个经验法则是选择rel_error + xstd < xerror.

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

另外,请参阅 SO 线程如何从决策树计算错误率?

于 2015-03-22T17:49:53.833 回答
8

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

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

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

    注意:rel_error 不应该用于修剪。

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

于 2017-12-13T23:03:50.223 回答