2016-05-19 17 views
0

Ich habe ein Klassifizierungsproblem und einer der Prädiktoren ist eine kategorische Variable X mit vier Ebenen A, B, C, D, die in drei Dummy-Variablen umgewandelt wurde ABC. Ich habe versucht, die Recursive Feature Selection (RFE) im Caret-Paket zu verwenden, um die Feature-Auswahl durchzuführen. Wie kann ich der RFE-Funktion mitteilen, A, B, C, D zusammen zu betrachten? wenn also A ausgeschlossen ist, sind B & C ebenfalls ausgeschlossen.Caret RFE zu Dummy-Variablen, die Ebenen der gleichen kategorialen Variablen sind

Nachdem ich den ganzen Tag damit zu kämpfen habe, gehe ich immer noch nirgends ... Die RFE über die Formelschnittstelle zu füttern funktioniert auch nicht. Ich denke RFE konvertiert automatisch alle Faktoren in Dummy-Variablen.

Unten ist mein Beispielcode:

#rfe settings 
lrFuncs$summary<- twoClassSummary 
trainctrl <- trainControl(classProbs= TRUE, 
         summaryFunction = twoClassSummary) 

ctrl<-rfeControl(functions=lrFuncs,method = "cv", number=3) 

#Data pre-process to exclude nzv and highly correlated variables 
x<-training[,c(1, 4:25, 27:39)] 
x2<-model.matrix(~., data = x)[,-1] 
nzv <- nearZeroVar(x2,freqCut = 300/1) 
x3 <- x2[, -nzv] 
corr_mat <- cor(x3) 
too_high <- findCorrelation(corr_mat, cutoff = .9) 
x4 <- x3[, -too_high] 

excludes<-c(names(data.frame(x3[, nzv])),names(data.frame(x3[, too_high]))) 

#Exclude the variables identified 
x_frame<-x[ , -which(names(x) %in% c(excludes))] 

#Run rfe 
set.seed((408)) 
#This does not work with the error below 
glmProfile<-rfe(x_frame,y,sizes =subsets, rfeControl = ctrl,trControl =trainctrl,metric = "ROC") 
Error in { : task 1 failed - "undefined columns selected" 
In addition: Warning messages: 
1: glm.fit: fitted probabilities numerically 0 or 1 occurred 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 
3: glm.fit: fitted probabilities numerically 0 or 1 occurred 

#it works if convert x_frame to matrix and then back to data frame, but this way rfe may remove some dummy variables (i.e.remove A but leave B&C) 
glmProfile<-rfe(data.frame(model.matrix(~., data = x_frame)[,-1]),y,sizes =subsets, rfeControl = ctrl,trControl =trainctrl,metric = "ROC") 

x_frame hier, enthält kategorische Variablen, die mehrere Ebenen haben.

Jede Hilfe wird sehr geschätzt!

+0

Danke @grubjesic für die Bearbeitung. – ybeybe

+0

Da es bis jetzt keine Antwort gibt, werde ich erwähnen, wie ich mich dem jetzt näherte. Wenn die RFE-Funktion den Ausschluss einiger Ebenen einer kategorialen Variablen vorschlägt, würde ich die Wichtigkeit der restlichen Ebenen überprüfen und entscheiden, alle Ebenen alle zusammen auszuschließen oder sie alle im Modell zu belassen - führen Sie im Grunde ein paar Experimente durch . Dieser Ansatz ist ein bisschen manuell, aber ich denke, es ist ein praktikabler Ansatz. – ybeybe

+0

a) Wollten Sie sagen, dass Sie 4 Stufen in 3 Dummy-Variablen umgewandelt haben? Das Erhalten von 4 Dummy-Variablen wäre der übliche Weg. b) Benötigt Ihr Klassifikator tatsächlich Dummy-Variablen? Andernfalls könnten Sie sie in eine Variable mit mehreren Ebenen zurück konvertieren. c) Gibt es einen Grund, warum Sie * alle oder keine Dummy-Variablen ausschließen müssen? Ich kann mir nicht vorstellen, warum man das bei RFE machen möchte. – geekoverdose

Antwort

0

Erstens: Ja, Sie haben Recht, dass Sie kategoriale Funktionen mit RFE nicht verwenden können (es gibt eine vernünftige Erklärung dafür von Max here on CV). Und interessanterweise verursacht das Codieren von alle Ebenen in Dummy-Variablen wirklich einen Fehler, der durch Entfernen einer Dummy-Variablen gelöst werden kann. Folglich würde auch ich Ihre Daten vorverarbeiten, indem Sie Dummy-Variablen aus der kategorialen Variablen erstellen und eine Ebene auslassen.

Aber ich würde nicht versuchen, entweder alle oder keine Dummy-Variablen am Ende zu behalten. Wenn RFE einige von ihnen auswirft (aber nicht alle), dann scheinen einige Ebenen mehr wertvolle Informationen zu enthalten als andere. Dies sollte vernünftig sein. Stellen Sie sich vor, Level A von A, B, C enthält wertvolle Informationen für Ihre Zielvariable. In dem Fall, in dem A während der Dummy-Variablenerzeugung beibehalten wurde, würden B und C wahrscheinlich von RFE verworfen werden. Wenn A während der Dummy-Variablenerzeugung verworfen wurde, würden B und C wahrscheinlich beide von RFE behalten werden.

PS: Wenn Sie kontinuierliche und kategoriale Informationen mischen, sollten Sie Ihre Daten entsprechend skalieren, bevor Sie sie an RFE übergeben, um sicherzustellen, dass die Auswirkungen von kontinuierlichen und kategorialen Informationen auf RFE ähnlich sind.

+0

Vielen Dank @geekoverdose für Ihre Antwort. Es ist vollkommen in Ordnung, wenn RFE einige der Ebenen aus der Sicht der Vorhersage/maschinellen Lernfähigkeit herausführt; Dies wird jedoch die Interpretation der verbleibenden Koeffizienten bedeutungslos machen (zumindest bis zu einem gewissen Grad). siehe http: //stats.stackexchange.com/questions/213362/logistische-Regression-kategorische-Variable-Interpretation-nach-transformiert-in-d/213371? noredirect = 1 # comment405246_213371 für meine verwandte Frage zu crossvalidated.Seit meinem Hauptzweck ist Vorhersage, ich könnte es einfach lassen wie du vorgeschlagen hast. Ich werde auch meine Variablen skalieren. Vielen Dank! – ybeybe

+0

Je mehr ich darüber nachdenke, desto mehr habe ich das Gefühl, dass beide Aktionen gültig sind (lassen Sie einige Stufen offen, oder lassen Sie die ganze Variable draußen). Es ist nur einer, der einen maschinellen Lernansatz verwendet (d. H. Die Vorhersagegenauigkeit ist wichtiger als die Inferenz), während der andere aus statistischer Sicht sinnvoller ist. Ich werde die Antwort hier akzeptieren, aber wenn jemand weitere Kommentare/Literatur zu diesem Problem teilen möchte, zögern Sie nicht, dies zu tun. – ybeybe

+0

Ich kam gerade zu einer ähnlichen Schlussfolgerung nach dem Lesen der vorherigen. Frage (die ich vorher nicht kannte). Von meiner eher prediktionsorientierten pov * nicht * macht die Verwendung von Teilen der Information keinen Sinn, während von der Interpretierbarkeit pov verlierende Interpretierbarkeit stattdessen viel schlechter sein könnte. – geekoverdose