我真的不明白如何计算列“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 是怎么计算出来的呢?