如果我用默认值指定 parms,为什么我会得到不同的 rpart 交叉验证错误?
Why do I get different cross validation errors with rpart if I specify parms with default values?
我对以下问题感到困惑:
set.seed(144)
df = data.frame(outcome=as.factor(sample(c('a','b','c'), 1000, replace=T)), x=rnorm(1000), y=rnorm(1000), z=rnorm(1000))
library(rpart)
fit.default = rpart(outcome ~ x + y + z, data=df, method='class')
fit.specified = rpart(outcome ~ x + y + z, data=df, method='class', parms=list(split='gini', loss=matrix(c(0,1,1,1,0,1,1,1,0), nrow=3,ncol=3,byrow=T)))
fit.default$cptable
fit.specified$cptable
它在 xerror 和 xstd 列中为指定值和默认值生成不同的值。但是根据 ?rpart,默认拆分是 'gini',默认损失矩阵是我提供的 1 矩阵(对角线为零)。那么为什么它会表现不同呢?我注意到这一点是因为我根据最小 xerror 选择了不同的树,并想验证基线默认情况。
说明我上面的评论,如果你 运行 他们完全解开:
set.seed(144)
df = data.frame(outcome=as.factor(sample(c('a','b','c'), 1000, replace=T)),
x=rnorm(1000),
y=rnorm(1000),
z=rnorm(1000))
library(rpart)
fit.default = rpart(outcome ~ x + y + z,
data=df,
method='class')
fit.default$cptable
set.seed(144)
df = data.frame(outcome=as.factor(sample(c('a','b','c'), 1000, replace=T)),
x=rnorm(1000),
y=rnorm(1000),
z=rnorm(1000))
library(rpart)
fit.specified = rpart(outcome ~ x + y + z,
data=df,
method='class',
parms=list(split='gini',
loss=matrix(c(0,1,1,1,0,1,1,1,0),
nrow=3,
ncol=3,
byrow=T)))
fit.specified$cptable
你得到:
> fit.default$cptable
CP nsplit rel error xerror xstd
1 0.0375000 0 1.000000 1.0000000 0.02371708
2 0.0140625 1 0.962500 0.9640625 0.02401939
3 0.0100000 3 0.934375 0.9921875 0.02378775
和
> fit.specified$cptable
CP nsplit rel error xerror xstd
1 0.0375000 0 1.000000 1.0000000 0.02371708
2 0.0140625 1 0.962500 0.9640625 0.02401939
3 0.0100000 3 0.934375 0.9921875 0.02378775
我对以下问题感到困惑:
set.seed(144)
df = data.frame(outcome=as.factor(sample(c('a','b','c'), 1000, replace=T)), x=rnorm(1000), y=rnorm(1000), z=rnorm(1000))
library(rpart)
fit.default = rpart(outcome ~ x + y + z, data=df, method='class')
fit.specified = rpart(outcome ~ x + y + z, data=df, method='class', parms=list(split='gini', loss=matrix(c(0,1,1,1,0,1,1,1,0), nrow=3,ncol=3,byrow=T)))
fit.default$cptable
fit.specified$cptable
它在 xerror 和 xstd 列中为指定值和默认值生成不同的值。但是根据 ?rpart,默认拆分是 'gini',默认损失矩阵是我提供的 1 矩阵(对角线为零)。那么为什么它会表现不同呢?我注意到这一点是因为我根据最小 xerror 选择了不同的树,并想验证基线默认情况。
说明我上面的评论,如果你 运行 他们完全解开:
set.seed(144)
df = data.frame(outcome=as.factor(sample(c('a','b','c'), 1000, replace=T)),
x=rnorm(1000),
y=rnorm(1000),
z=rnorm(1000))
library(rpart)
fit.default = rpart(outcome ~ x + y + z,
data=df,
method='class')
fit.default$cptable
set.seed(144)
df = data.frame(outcome=as.factor(sample(c('a','b','c'), 1000, replace=T)),
x=rnorm(1000),
y=rnorm(1000),
z=rnorm(1000))
library(rpart)
fit.specified = rpart(outcome ~ x + y + z,
data=df,
method='class',
parms=list(split='gini',
loss=matrix(c(0,1,1,1,0,1,1,1,0),
nrow=3,
ncol=3,
byrow=T)))
fit.specified$cptable
你得到:
> fit.default$cptable
CP nsplit rel error xerror xstd
1 0.0375000 0 1.000000 1.0000000 0.02371708
2 0.0140625 1 0.962500 0.9640625 0.02401939
3 0.0100000 3 0.934375 0.9921875 0.02378775
和
> fit.specified$cptable
CP nsplit rel error xerror xstd
1 0.0375000 0 1.000000 1.0000000 0.02371708
2 0.0140625 1 0.962500 0.9640625 0.02401939
3 0.0100000 3 0.934375 0.9921875 0.02378775