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!
Danke @grubjesic für die Bearbeitung. – ybeybe
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
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