如何在 RPART(或一般的决策树)中计算 CP(成本复杂性)值

机器算法验证 r 大车 rpart
2022-03-05 04:15:54

据我了解,该rpart函数的 cp 参数有助于以与 minsplit 或 minbucket 参数相同的方式预先修剪树。我不明白的是如何计算 CP 值。例如

df<-data.frame(x=c(1,2,3,3,3,4), y=as.factor(c(TRUE, TRUE, FALSE, TRUE, FALSE, FALSE)), method="class")
mytree<-rpart(y ~ x, data = df, minbucket = 1, minsplit=1)

结果树...

mytree
n= 6 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 6 3 FALSE (0.5000000 0.5000000)  
  2) x>=2.5 4 1 FALSE (0.7500000 0.2500000) *
  3) x< 2.5 2 0 TRUE (0.0000000 1.0000000) *

概括...

summary(mytree)

Call:
rpart(formula = y ~ x, data = df, minbucket = 1, minsplit = 1)
  n= 6 

         CP nsplit rel error    xerror      xstd
1 0.6666667      0 1.0000000 2.0000000 0.0000000
2 0.0100000      1 0.3333333 0.6666667 0.3849002

.666 和 .01 来自哪里?

2个回答

我从很多天以来一直在寻找相同的东西,我开始知道一件事,cp 值计算是由包处理的。默认情况下,如果您未指定“CP”值,则 rpart 将其作为 0.01。Cp 值是将节点添加到树的成本。

rpart 中的复杂度参数 (cp) 是每个节点所需的模型的最小改进。它基于定义为的模型的成本复杂性 在此处输入图像描述

对于给定的树,将每个终端节点的错误分类相加。然后将分割次数乘以惩罚项 (lambda) 并将其添加到总错误分类中。lambda 是通过交叉验证确定的,并且未在 R 中报告。

对于回归模型(见下一节),缩放的 cp 有一个非常直接的解释:如果任何拆分不会将模型的整体 R2 至少增加 cp(其中 R2 是通常的线性模型定义),那么该拆分将被判定为是,先验的,不值得追求。请参阅 rpart 的 longintro 文档