rpart 和 printcp 函数

机器算法验证 r 分类 交叉验证 rpart
2022-03-14 10:47:05

我真的不明白如何计算列“xerror”和“rel error”。我发现 printcp() 函数“给出了错误分类错误 (xerror)、这些估计的标准错误 (xstd) 和训练(重新替换)估计 (error) 的交叉验证估计”。

这是一个例子:

car <- read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data", sep=",")
set.seed(2)
tree <- rpart(V7~.,data=car)
printcp(tree)
# OUTPUT #####################################
Classification tree:
rpart(formula = V7 ~ ., data = car)

Variables actually used in tree construction:
[1] V1 V2 V4 V5 V6

Root node error: 518/1728 = 0.29977

n= 1728 

        CP nsplit rel error  xerror     xstd
1 0.129344      0   1.00000 1.00000 0.036767
2 0.115830      2   0.74131 0.85135 0.034987
3 0.040541      4   0.50965 0.50965 0.028872
4 0.030888      7   0.38803 0.38803 0.025729
5 0.027027      9   0.32625 0.35328 0.024694
6 0.023166     10   0.29923 0.30888 0.023261
7 0.017375     12   0.25290 0.26641 0.021754
8 0.015444     14   0.21815 0.23552 0.020557
9 0.010000     16   0.18726 0.18726 0.018472
############################################
# Missclassification Error
sum(predict(tree, type="class")!=car$V7)/nrow(car)
[1] 0.05613426

我们的错误分类错误似乎是 0.05613426。在 printcp 输出中,估计值为 0.18726。这怎么可能发生?我还尝试了 10 倍交叉验证来估计预期的错误分类错误,并得到 0.05497715 作为错误。那么这个来自 printcp 输出的 xerror 和 rel 误差列的 0.18726 是怎么计算出来的呢?

1个回答

您可以将“根节点错误”乘以“rel 错误”。如果你这样做,0.2997×0.187260.056这是您在进行交叉验证时获得的错误。