2016-04-05 21 views
0

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?

+1

Es ist unwahrscheinlich, dass der Algorithmus nicht-numerische Variablen akzeptiert, deshalb werden Faktoren/Zeichen als Dummy-Variablen kodiert. – iboboboru

+0

@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

Antwort

1

Damit Caret sich genau wie rpart verhält, setze ich die trainControl Funktion auf "none" und benutze ein tuneGrid eines Datensatzes mit einer cp Einstellung von 0.01. Die Standardwerte sind dann genau dieselben wie die Standardwerte 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) * 

Betrachtet man beide Modelle Sie, dass auch sehen kann, obwohl caret die Faktoren und Zeichen transformiert, um eine Standardklasse als areference Klasse zu haben, der Baum ist genau das gleiche mit den gleichen Prozentsätze in den Knoten. Sie können das Partykit-Paket verwenden und as.party() auf den Modellen verwenden, um ein besseres Layout zu erhalten.

Wenn Sie jedoch genau das gleiche Modell wie rpart verwenden möchten, ohne die Faktoren zu verwenden, können Sie die Standardmethode für die Verwendung von Modellen verwenden.

#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) *