调用插入符号包的train函数时,数据将自动转换,以便将所有因素变量转换为一组虚拟变量。
我怎样才能防止这种行为?是否可以说“不要将因素转换成虚拟变量”?
例如:
如果我对rpart数据运行etitanic算法:
library(caret)
library(earth)
data(etitanic)
etitanic$survived[etitanic$survived==1] <- 'YES'
etitanic$survived[etitanic$survived!='YES'] <- 'NO'
model<-train(survived~., data=etitanic, method='rpart')最后生成的模型如下所示:
> model$finalModel
n= 1046
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 1046 427 NO (0.5917782 0.4082218)
2) sexmale>=0.5 658 135 NO (0.7948328 0.2051672)
4) age>=9.5 615 110 NO (0.8211382 0.1788618) *
5) age< 9.5 43 18 YES (0.4186047 0.5813953)
10) sibsp>=2.5 16 1 NO (0.9375000 0.0625000) *
11) sibsp< 2.5 27 3 YES (0.1111111 0.8888889) *
3) sexmale< 0.5 388 96 YES (0.2474227 0.7525773) *然而,如果我直接运行rpart算法并构建一棵树,我将得到
> rpart(survived~., data=etitanic)
n= 1046
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 1046 427 NO (0.59177820 0.40822180)
2) sex=male 658 135 NO (0.79483283 0.20516717)
4) age>=9.5 615 110 NO (0.82113821 0.17886179) *
5) age< 9.5 43 18 YES (0.41860465 0.58139535)
10) sibsp>=2.5 16 1 NO (0.93750000 0.06250000) *
11) sibsp< 2.5 27 3 YES (0.11111111 0.88888889) *
3) sex=female 388 96 YES (0.24742268 0.75257732)
6) pclass=3rd 152 72 NO (0.52631579 0.47368421)
12) age>=1.5 145 66 NO (0.54482759 0.45517241)
24) sibsp>=1.5 19 4 NO (0.78947368 0.21052632) *
25) sibsp< 1.5 126 62 NO (0.50793651 0.49206349)
50) age>=27.5 44 15 NO (0.65909091 0.34090909) *
51) age< 27.5 82 35 YES (0.42682927 0.57317073) *
13) age< 1.5 7 1 YES (0.14285714 0.85714286) *
7) pclass=1st,2nd 236 16 YES (0.06779661 0.93220339) *现在,忘了树木不同的部分吧。我知道,它们是用不同的参数建造的。但是,它们也建立在不同的数据集上。例如,插入树构建在一个数据集上,其中一个列是“性别男性”,这是从原始数据中的sex列生成的虚拟列。
有什么方法告诉caret在将数据输入rpart之前不要执行虚拟变量创建吗?
发布于 2016-04-07 11:28:50
为了使插入符号的行为与rpart完全相同,我首先将trainControl函数设置为"none“,并将使用一个记录的tuneGrid,cp设置为0.01。然后,缺省值与rpart的默认值完全相同。
ctrl <- trainControl(method = "none")
#caret formula model
model<-train(survived ~ .,
data=etitanic,
method='rpart',
trControl = ctrl,
tuneGrid = expand.grid(cp = 0.01))
# rpart model
model_rp <- rpart(survived~., data=etitanic)
print(model$finalModel)
1) root 1046 427 NO (0.59177820 0.40822180)
2) sexmale>=0.5 658 135 NO (0.79483283 0.20516717)
4) age>=9.5 615 110 NO (0.82113821 0.17886179) *
5) age< 9.5 43 18 YES (0.41860465 0.58139535)
10) sibsp>=2.5 16 1 NO (0.93750000 0.06250000) *
11) sibsp< 2.5 27 3 YES (0.11111111 0.88888889) *
3) sexmale< 0.5 388 96 YES (0.24742268 0.75257732)
6) pclass3rd>=0.5 152 72 NO (0.52631579 0.47368421)
12) age>=1.5 145 66 NO (0.54482759 0.45517241)
24) sibsp>=1.5 19 4 NO (0.78947368 0.21052632) *
25) sibsp< 1.5 126 62 NO (0.50793651 0.49206349)
50) age>=27.5 44 15 NO (0.65909091 0.34090909) *
51) age< 27.5 82 35 YES (0.42682927 0.57317073) *
13) age< 1.5 7 1 YES (0.14285714 0.85714286) *
7) pclass3rd< 0.5 236 16 YES (0.06779661 0.93220339) *
print(model_rp)
1) root 1046 427 NO (0.59177820 0.40822180)
2) sex=male 658 135 NO (0.79483283 0.20516717)
4) age>=9.5 615 110 NO (0.82113821 0.17886179) *
5) age< 9.5 43 18 YES (0.41860465 0.58139535)
10) sibsp>=2.5 16 1 NO (0.93750000 0.06250000) *
11) sibsp< 2.5 27 3 YES (0.11111111 0.88888889) *
3) sex=female 388 96 YES (0.24742268 0.75257732)
6) pclass=3rd 152 72 NO (0.52631579 0.47368421)
12) age>=1.5 145 66 NO (0.54482759 0.45517241)
24) sibsp>=1.5 19 4 NO (0.78947368 0.21052632) *
25) sibsp< 1.5 126 62 NO (0.50793651 0.49206349)
50) age>=27.5 44 15 NO (0.65909091 0.34090909) *
51) age< 27.5 82 35 YES (0.42682927 0.57317073) *
13) age< 1.5 7 1 YES (0.14285714 0.85714286) *
7) pclass=1st,2nd 236 16 YES (0.06779661 0.93220339) *查看这两种模型,您可以看到,即使插入符号将因素和字符转换为默认类为areference类,树在节点中的百分比也完全相同。您可以使用partykit包并在模型上使用as.party()来获得更好的布局。
但是,如果您想在不使用这些因素的情况下拥有与rpart完全相同的模型,则可以使用默认的使用模型的方式。
#caret default model
model_xy <-train(x = etitanic[, -2],
y = etitanic$survived,
method='rpart',
trControl = ctrl,
tuneGrid = expand.grid(cp = 0.01))
print(model_xy$finalModel)
1) root 1046 427 NO (0.59177820 0.40822180)
2) sex=male 658 135 NO (0.79483283 0.20516717)
4) age>=9.5 615 110 NO (0.82113821 0.17886179) *
5) age< 9.5 43 18 YES (0.41860465 0.58139535)
10) sibsp>=2.5 16 1 NO (0.93750000 0.06250000) *
11) sibsp< 2.5 27 3 YES (0.11111111 0.88888889) *
3) sex=female 388 96 YES (0.24742268 0.75257732)
6) pclass=3rd 152 72 NO (0.52631579 0.47368421)
12) age>=1.5 145 66 NO (0.54482759 0.45517241)
24) sibsp>=1.5 19 4 NO (0.78947368 0.21052632) *
25) sibsp< 1.5 126 62 NO (0.50793651 0.49206349)
50) age>=27.5 44 15 NO (0.65909091 0.34090909) *
51) age< 27.5 82 35 YES (0.42682927 0.57317073) *
13) age< 1.5 7 1 YES (0.14285714 0.85714286) *
7) pclass=1st,2nd 236 16 YES (0.06779661 0.93220339) *https://stackoverflow.com/questions/36421296
复制相似问题