R rpart交叉验证和1 SE规则,为什么cptable中的列称为“xstd”?

机器算法验证 交叉验证 rpart
2022-04-05 11:25:42

R 中的 rpart() 函数返回包含 xerror 和 xstd 列的 cptable。这是一个任意的例子。

            CP nsplit rel error    xerror       xstd
1  0.161992664      0 1.0000000 1.0002790 0.01853630
2  0.043985638      1 0.8380073 0.8385070 0.01749290
3  0.030278222      2 0.7940217 0.7963870 0.01709283
4  0.013881619      3 0.7637435 0.7695997 0.01653832
5  0.010181164      4 0.7498619 0.7560406 0.01606136
6  0.008004043      5 0.7396807 0.7466449 0.01600352
7  0.007026176      6 0.7316767 0.7356289 0.01549501
8  0.006614587      8 0.7176243 0.7388091 0.01559568
9  0.005312278     10 0.7043951 0.7254237 0.01522645
10 0.004883811     11 0.6990828 0.7248227 0.01526605

有人认为应该根据最小交叉验证错误 (xerror) 对树进行修剪,因此将在发生最小 xerror 的第 10 行进行修剪。其他人争辩说,“1SE 规则”建议寻找最小值,然后再上升 1SE,因为那棵树不那么复杂。使用 xstd 列,建议使用 0.7248227 + 1*0.01526605 = 0.7400887,因此修剪应该发生在第 7 行。另请参阅这篇文章: 如何选择 rpart() 中的分割数?

我的简单问题:为什么标有“xstd”的列(可能意味着交叉验证的标准偏差),但人们将此称为 1SE 规则而不是 1SD 规则。

1个回答

'xstd' 只是一个糟糕的标签,它应该说 'xse' 因为它实际上输出的是标准误差,而不是标准偏差。如果您在上面选择第 7 行,那么您正在按照您的意图正确应用“1SE 规则”。