Beim Aufrufen der train
-Funktion des Caret-Pakets werden die Daten automatisch so transformiert, dass alle Faktorvariablen in eine Gruppe von Dummy-Variablen umgewandelt werden.Caret- und Dummy-Variablen
Wie kann ich dieses Verhalten verhindern? Ist es möglich zu sagen, dass "Faktoren nicht in Dummy-Variablen umgewandelt werden"?
Zum Beispiel:
Wenn ich laufe den rpart
Algorithmus auf den etitanic
Daten:
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')
Dann wird das endgültige Modell wie so produzierte Aussehen:
> 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) *
während, wenn ich laufe die rpart
Algorithmus direkt und baue einen Baum, bekomme ich
> 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) *
Jetzt vergessen Sie den Teil, dass die Bäume anders sind. Ich verstehe, sie sind mit verschiedenen Parametern gebaut. Sie sind jedoch auch auf verschiedene Datensätze aufgebaut. Der Caret-Baum wurde beispielsweise auf einem Datensatz erstellt, in dem eine Spalte "sexmale" war, und dies war die Dummy-Spalte, die aus der Spalte sex
in den Originaldaten erstellt wurde.
Gibt es eine Möglichkeit, caret
mitzuteilen, diese Dummy-Variable nicht zu erstellen, bevor die Daten an rpart
übergeben werden?
Es ist unwahrscheinlich, dass der Algorithmus nicht-numerische Variablen akzeptiert, deshalb werden Faktoren/Zeichen als Dummy-Variablen kodiert. – iboboboru
@iboboboru siehe mein Beispiel. Das "caret" -Paket in meinem Beispiel ruft eine Funktion auf, die ** in der Lage ist, Faktoren zu handhaben. Ich möchte wissen, was ich tun kann, um sicherzustellen, dass die Faktoren den internen Anruf erreichen. – 5xum