在CART中选择复杂度参数


16

在用于创建CART模型的rpart()例程中,指定要将树修剪到的复杂度参数。对于选择复杂度参数,我看到了两种不同的建议:

  1. 选择与最小可能的交叉验证错误关联的复杂性参数。Quick-R和HSAUR 建议使用此方法。

  2. 选择最大复杂度参数,其估计的交叉验证误差仍在最小可能交叉验证误差的SE之内。这是我的包文档的解释,它说:“为修剪一个很好的选择CP往往是最左边的值,其平均谎言低于水平线”中提到此情节

cp的两个选择在我的数据集中产生了完全不同的树。

似乎第一种方法将始终生成更复杂的,可能过度拟合的树。在文献中还存在其他优点,缺点和建议等。在决定使用哪种方法时应考虑在内?如果可以的话,我可以提供有关我的特定建模问题的更多信息,但是我试图将这个问题范围扩大到与其他问题相关。


图中的水平线代表什么?
Bogdanovist

我相信它比最小交叉验证错误高出1 SE。
半时通过

如果您有足够的数据,则可以尝试将其分为训练和测试数据集,甚至对于树木也是如此。如果您主要对预测感兴趣,这可能特别有用,因为测试数据集将对此做出很好的估计。另一个选择是party使用重要性测试的程序包(通常我不建议这样做,但在这里似乎很相关)。与往常一样,最好的测试是有用性和合理性。如果您主要对解释感兴趣,那么尤其如此。
彼得·弗洛姆

我为响应缓慢表示歉意。为了明确起见,我认为,通过使用交叉验证来计算不同树大小下的错误,我已经有效地将数据重复地分为训练集和测试集。在这种情况下,进行其他训练/测试分组是否多余?我是在误会你吗
半点通过

仅将训练/测试中的数据进行划分,并仅使用训练数据对cp参数进行交叉验证,将重现现实的预测测试(您无法使用将来的数据来估算cp)。因此,第一个CV将用于cp,即整个模型的预测误差(包括估计的cp)。
罗伯特·库布里克

Answers:


6

在实践中,我看到了两种方法都采用,而且我认为通常不会期望您的结果在两种方法上有很大差异。

话虽如此,Hastie等人在《统计学习要素》中建议使用“一个标准错误”规则,我倾向于相信他们的判断(在我的版本中,第7.10节,第244页)。相关报价为:

通常在交叉验证中使用“一个标准误差”规则,在该规则中,我们选择最简约的模型,其误差不超过最佳模型误差的一个标准误差。”

您对为什么遵循一个标准错误规则的直觉是正确的-这样做是为了避免选择过拟合数据的模型。


1

您应该首先使用参数minsplit=0cp=0(复杂性参数)开始,然后使用函数plotcp(T.max)printcp(T.max)选择cp对应的最小相对误差的值,然后通过函数修剪树prune.rpart(T.max, cp=....)

这应该为您提供最佳的分类树,因为它们往往过于乐观。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.