rpart,交叉验证。

机器算法验证 大车 rpart
2022-04-13 11:36:58

我有一个将 rpart 用于回归树的问题。我想知道当我使用时plotcp,我的验证数据来自哪里?目前,我有一个训练数据集、测试集和验证集。但如果我只是这样做plotcp,我如何指定我的验证集?

#Regression Tree Example
library(rpart)

# grow tree 
fit <- rpart(Mileage~Price + Country + Reliability + Type, 
   method="anova", data=cu.summary)

printcp(fit) # display the results 
plotcp(fit) # visualize cross-validation results 
summary(fit) # detailed summary of splits
1个回答

rpart包的plotcp函数绘制了适合训练数据集的 rpart 树的复杂性参数表。plotcp使用该函数时,您无需提供任何额外的验证数据集。

Rpart 实现首先在整个数据上拟合一棵完全生长的树DT终端节点。在这一步之后,将树修剪为具有最低错误分类损失的最小树。这是它的工作原理:

  1. 然后将数据拆分为n(默认 = 10)随机选择的折叠:F1F10
  2. 然后它使用 10 折交叉验证并拟合每个子树T1...Tm在每个训练折叠Ds.
  3. 相应的错误分类损失(风险)Rm然后通过比较为验证折叠预测的类与实际类来计算每个子树的值;并且每个子树的这个风险值对所有折叠求和。
  4. 复杂度参数β最终选择在整个数据集上给出最低总风险。
  5. 然后使用此复杂度参数拟合完整数据,并选择此树作为最佳修剪树。

因此,当您使用 时plotcp,它会从最小到最大绘制每个子树的相对交叉验证误差,以便您比较每个复杂性参数的风险β.

例如,使用rpart包中的 StageC 癌症预后数据集参考以下拟合:

> printcp( cfit)

Classification tree:
rpart(formula = progstat ~ age + eet + g2 + grade + gleason + 
    ploidy, data = stagec, method = "class")

Variables actually used in tree construction:
[1] age    g2     grade  ploidy

Root node error: 54/146 = 0.36986

n= 146 

        CP nsplit rel error  xerror    xstd
1 0.104938      0   1.00000 1.00000 0.10802
2 0.055556      3   0.68519 1.16667 0.11083
3 0.027778      4   0.62963 0.96296 0.10715
4 0.018519      6   0.57407 0.96296 0.10715
5 0.010000      7   0.55556 1.00000 0.10802

交叉验证的错误按比例缩小以便于阅读;图上的误差条显示 x 验证误差的一个标准偏差。

在此处输入图像描述

参考:

  1. 使用 RPART 例程进行递归分区的介绍,URL:https ://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf