如何强制 rpart 精确执行 1 次拆分
How to force rpart to do exactly 1 Split
遇到类似于 this 的问题,我试图强制 rpart 只进行一次拆分。这是一个重现我的问题的玩具示例:
require(rpart)
y <- factor(c(1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))
x1 <- c(12,18,15,10,10,10,20,6,7,34,7,11,10,22,4,19,10,8,13,6,7,47,6,15,7,7,21,7,8,10,15)
x2 <- c(318,356,341,189,308,236,290,635,550,287,261,472,282,262,1153,435,402,182,415,544,251,281,378,498,142,566,152,560,284,213,326)
data <- data.frame(y=y,x1=x1,x2=x2)
tree <-rpart(y~.,
data=data,
control=rpart.control(maxdepth=1, # at most 1 split
cp=0, # any positive improvement will do
minsplit=1,
minbucket=1, # even leaves with 1 point are accepted
xval=0)) # I don't need crossvalidation
length(tree$frame$var) #==1, so there are no splits
隔离单个点应该是可能的 (minbucket=1),即使是最边缘的改进(隔离一个点总是会降低错误分类率)也应该导致保持分裂(cp=0)。
为什么结果不包括任何拆分?我如何更改代码以始终准确地进行一次拆分?如果两者都分类为相同的因子输出,是否不会保留拆分?
将 cp = 0 更改为 cp = -1。
显然第一次分割 (maxdepth = 3) 的 cp 是 0.0000000。因此,负值允许它以 maxdepth = 1 显示。
遇到类似于 this 的问题,我试图强制 rpart 只进行一次拆分。这是一个重现我的问题的玩具示例:
require(rpart)
y <- factor(c(1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))
x1 <- c(12,18,15,10,10,10,20,6,7,34,7,11,10,22,4,19,10,8,13,6,7,47,6,15,7,7,21,7,8,10,15)
x2 <- c(318,356,341,189,308,236,290,635,550,287,261,472,282,262,1153,435,402,182,415,544,251,281,378,498,142,566,152,560,284,213,326)
data <- data.frame(y=y,x1=x1,x2=x2)
tree <-rpart(y~.,
data=data,
control=rpart.control(maxdepth=1, # at most 1 split
cp=0, # any positive improvement will do
minsplit=1,
minbucket=1, # even leaves with 1 point are accepted
xval=0)) # I don't need crossvalidation
length(tree$frame$var) #==1, so there are no splits
隔离单个点应该是可能的 (minbucket=1),即使是最边缘的改进(隔离一个点总是会降低错误分类率)也应该导致保持分裂(cp=0)。
为什么结果不包括任何拆分?我如何更改代码以始终准确地进行一次拆分?如果两者都分类为相同的因子输出,是否不会保留拆分?
将 cp = 0 更改为 cp = -1。
显然第一次分割 (maxdepth = 3) 的 cp 是 0.0000000。因此,负值允许它以 maxdepth = 1 显示。