2013-10-10 55 views
6

我原來有一個數據框由N行12列組成。最後一列是我的班級(0或1)。我有我的整個數據幀轉換爲數值與使用randomforest()在R中進行分類?

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

不過轉念一想,我需要的類列是一個因素列使用隨機森林()工具的分類,所以我也

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

我繼續與

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

創建樹但我發現了兩個錯誤:

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? 

如果有人能指出我所做的格式錯誤,我將不勝感激。

謝謝!

+0

您正在嘗試使用'<='作爲賦值而不是'<-'。你還在創建一個新的專欄?如果是這樣的話,你應該刪除'Class'的數字版本或者不要在你的公式中使用'.' –

+0

解決這個問題的唯一信息就是'str(訓練)'的輸出。 – joran

+0

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

回答

5

首先,由於語法錯誤,您的強制因素不起作用。其次,您應該在指定RF模型時始終使用索引。這是你的代碼應該使它工作的變化。

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

這並沒有解決我的問題,它仍然問我是否想要做迴歸... – marc

+0

一旦我添加了我剛剛發佈的行,我最終使用了這種語法。 – marc

6

所以這個問題其實很簡單。事實證明,我的訓練數據是一個原子矢量。所以它首先必須轉換爲數據幀。所以我需要添加以下行:

training <- as.data.frame(training) 

問題解決!