rpart中的关键方法选择
Key methods selection in rpart
select rpart
的 rpart()
函数中的复杂性参数 (cp
) 和方法的规则是什么?我已经阅读了几篇关于该软件包的文章,但内容太过技术化,我无法理解。
示例:
rpart_1 <- rpart(myFormula, data = kyphosis,
method = "class",
control = rpart.control(minsplit = 0, cp = 0))
plotcp(rpart_1)
printcp(rpart_1)
您通常不会选择 method
参数;它是为您选择的,作为您要解决的问题的一部分。如果是分类问题,就用method="class"
,如果是回归问题,就用method="anova"
,以此类推。自然地,这意味着您必须了解您要解决的问题是什么,以及您的数据是否能让您解决它。
cp
参数控制拟合树的大小。您可以通过交叉验证或使用单独的测试数据集来选择它的值。 rpart
与大多数其他 R 建模包的处理方式有些不同。 rpart
函数默认自动进行交叉验证。然后检查模型以查看交叉验证的结果,并根据该结果修剪模型。
工作示例,使用 MASS::Boston
数据集:
library(MASS)
# does 10-fold CV by default
Bos.tree <- rpart(medv ~ ., data=Boston, cp=0)
# look at the result of the CV
plotcp(Bos.tree)
该图显示,从大约 9 个叶节点的树大小开始,10 倍交叉验证错误变平。虚线是曲线的最小值加上 1 个标准误差,这是修剪决策树的标准经验法则:您选择在最小值的 1 SE 范围内的最小树大小。
打印 CP 值可以更准确地了解如何选择树的大小:
printcp(Bos.tree)
#CP nsplit rel error xerror xstd
#1 0.45274420 0 1.00000 1.00355 0.082973
#2 0.17117244 1 0.54726 0.61743 0.057053
#3 0.07165784 2 0.37608 0.43034 0.046596
#4 0.03616428 3 0.30443 0.34251 0.042502
#5 0.03336923 4 0.26826 0.32642 0.040456
#6 0.02661300 5 0.23489 0.32591 0.040940
#7 0.01585116 6 0.20828 0.29324 0.040908
#8 0.00824545 7 0.19243 0.28256 0.039576
#9 0.00726539 8 0.18418 0.27334 0.037122
#10 0.00693109 9 0.17692 0.27593 0.037326
#11 0.00612633 10 0.16999 0.27467 0.037310
#12 0.00480532 11 0.16386 0.26547 0.036897
# . . .
这表明 CP 值为 0.00612 对应于具有 10 个分裂(因此有 11 个叶子)的树。这是您用来修剪树的 cp
的值。所以:
# prune with a value of cp slightly greater than 0.00612633
Bos.tree.cv <- prune(Bos.tree, cp=0.00613)
select rpart
的 rpart()
函数中的复杂性参数 (cp
) 和方法的规则是什么?我已经阅读了几篇关于该软件包的文章,但内容太过技术化,我无法理解。
示例:
rpart_1 <- rpart(myFormula, data = kyphosis,
method = "class",
control = rpart.control(minsplit = 0, cp = 0))
plotcp(rpart_1)
printcp(rpart_1)
您通常不会选择 method
参数;它是为您选择的,作为您要解决的问题的一部分。如果是分类问题,就用method="class"
,如果是回归问题,就用method="anova"
,以此类推。自然地,这意味着您必须了解您要解决的问题是什么,以及您的数据是否能让您解决它。
cp
参数控制拟合树的大小。您可以通过交叉验证或使用单独的测试数据集来选择它的值。 rpart
与大多数其他 R 建模包的处理方式有些不同。 rpart
函数默认自动进行交叉验证。然后检查模型以查看交叉验证的结果,并根据该结果修剪模型。
工作示例,使用 MASS::Boston
数据集:
library(MASS)
# does 10-fold CV by default
Bos.tree <- rpart(medv ~ ., data=Boston, cp=0)
# look at the result of the CV
plotcp(Bos.tree)
该图显示,从大约 9 个叶节点的树大小开始,10 倍交叉验证错误变平。虚线是曲线的最小值加上 1 个标准误差,这是修剪决策树的标准经验法则:您选择在最小值的 1 SE 范围内的最小树大小。
打印 CP 值可以更准确地了解如何选择树的大小:
printcp(Bos.tree)
#CP nsplit rel error xerror xstd
#1 0.45274420 0 1.00000 1.00355 0.082973
#2 0.17117244 1 0.54726 0.61743 0.057053
#3 0.07165784 2 0.37608 0.43034 0.046596
#4 0.03616428 3 0.30443 0.34251 0.042502
#5 0.03336923 4 0.26826 0.32642 0.040456
#6 0.02661300 5 0.23489 0.32591 0.040940
#7 0.01585116 6 0.20828 0.29324 0.040908
#8 0.00824545 7 0.19243 0.28256 0.039576
#9 0.00726539 8 0.18418 0.27334 0.037122
#10 0.00693109 9 0.17692 0.27593 0.037326
#11 0.00612633 10 0.16999 0.27467 0.037310
#12 0.00480532 11 0.16386 0.26547 0.036897
# . . .
这表明 CP 值为 0.00612 对应于具有 10 个分裂(因此有 11 个叶子)的树。这是您用来修剪树的 cp
的值。所以:
# prune with a value of cp slightly greater than 0.00612633
Bos.tree.cv <- prune(Bos.tree, cp=0.00613)