2013-10-10 5 views
6

Ich hatte ursprünglich einen Datenrahmen bestehend aus 12 Spalten in N Zeilen. Die letzte Spalte ist meine Klasse (0 oder 1). Ich musste meinen gesamten Datenrahmen in numerischen konvertiere mitVerwendung von randomforest() zur Klassifizierung in R?

training <- sapply(training.temp,as.numeric) 

Aber dann dachte ich, ich die Klasse Säule benötigen ein Faktor Spalt, um die Random() Werkzeug als Klassifizierer zu verwenden, also tat ich

training[,"Class"] <- factor(training[,ncol(training)]) 

ich gehe den Baum mit

training_rf <- randomForest(Class ~., data = trainData, importance = TRUE, do.trace = 100) 

zur Schaffung Aber ich bin immer zwei Fehler:

1: In Ops.factor(training[, "Status"], factor(training[, ncol(training)])) : 
<= this is not relevant for factors (roughly translated) 
2: In randomForest.default(m, y, ...) : 
The response has five or fewer unique values. Are you sure you want to do regression? 

Ich würde es schätzen, wenn jemand auf den Formatierungsfehler hinweisen könnte, den ich mache.

Danke!

+0

Sie versuchen, '<=' für die Zuweisung anstelle von '<-' zu verwenden. Erstellen Sie auch eine neue Spalte? Wenn ja, sollten Sie die numerische Version von 'Class' loswerden oder nicht' .' in Ihrer Formel verwenden –

+0

Die einzige Information, die diese Frage klären kann, ist die Ausgabe von 'str (training)'. – joran

+0

@joran: num [1: 891, 1:12] 1 2 3 4 5 6 7 8 9 10 ... - attr (*, "dimnames") = Liste von 2 .. $: NULL .. $: chr [1:12] "ID" "Klasse" "Sex" "Alter" ... – marc

Antwort

5

Erstens funktioniert Ihr Zwang zu einem Faktor nicht wegen Syntaxfehlern. Zweitens sollten Sie die Indizierung immer verwenden, wenn Sie ein RF-Modell angeben. Hier sind Änderungen in Ihrem Code, die es funktionieren sollten.

training <- sapply(training.temp,as.numeric) 
     training[,"Class"] <- as.factor(training[,"Class"]) 

    training_rf <- randomForest(x=training[,1:(ncol(training)-1)], y=training[,"Class"], 
           importance=TRUE, do.trace=100) 

# You can also coerce to a factor directly in the model statement 
    training_rf <- randomForest(x=training[,1:(ncol(training)-1)], y=as.factor(training[,"Class"]), 
           importance=TRUE, do.trace=100) 
+0

Das hat mein Problem nicht gelöst, es fragt mich immer noch, ob ich eine Regression machen möchte ... – marc

+0

Ich habe diese Syntax benutzt, nachdem ich die Zeile hinzugefügt habe, die ich gerade gepostet habe. – marc

6

So ist das Problem eigentlich ganz einfach. Es stellt sich heraus, dass meine Trainingsdaten ein atomarer Vektor waren. Also musste es zuerst als Datenrahmen konvertiert werden. Also musste ich folgende Zeile hinzufügen:

training <- as.data.frame(training) 

Problem gelöst!

Verwandte Themen