2013-10-10 15 views
6

Pierwotnie miałem ramkę danych złożoną z 12 kolumn w N wierszach. Ostatnia kolumna to moja klasa (0 lub 1). Miałem przekonwertować całą ramkę danych do numerycznego zUżycie randomforest() do klasyfikacji w R?

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

Ale potem pomyślałem, że potrzebne kolumnę class być kolumna czynnikiem używać lasy losowe() narzędzia jako klasyfikatora, więc zrobiłem

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

mogę przystąpić do tworzenia drzewa z

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

Ale dostaję dwa błędy:

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? 

Byłbym wdzięczny, gdyby ktoś mógł wskazać błąd formatowania, który robię.

Dzięki!

+0

Próbujesz użyć '<=' do przypisania zamiast '<-'. Czy tworzysz także nową kolumnę? jeśli tak, powinieneś pozbyć się numerycznej wersji 'Klasy' lub nie używać' .' w formule –

+0

Jedyną informacją, która może rozstrzygnąć to pytanie, jest wynik działania 'str (training)'. – joran

+0

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

Odpowiedz

5

Po pierwsze, twój przymus dla czynnika nie działa z powodu błędów składniowych. Po drugie, zawsze powinieneś używać indeksowania podczas określania modelu RF. Oto zmiany w kodzie, które powinny sprawić, że zadziała.

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

To nie rozwiąże mojego problemu, wciąż mnie pyta, czy chcę zrobić regresję ... – marc

+0

Skończyło się na używaniu tej składni po dodaniu linii, którą właśnie napisałem. – marc

6

Problem jest więc dość prosty. Okazuje się, że moje dane treningowe były wektorem atomowym. Najpierw trzeba było go przekonwertować jako ramkę danych. Więc musiałem dodać następującą linię:

training <- as.data.frame(training) 

Problem rozwiązany!

Powiązane problemy