2013-04-22 78 views
1

使用randomForest,我得到一個RF對象。
例如forest <- randomForest(as.formula(generic),data=train, mtry=2)
根據隨機森林物體預測響應填充數據

使用predict我可以預測測試數據集的響應。
的響應是A,B或C.

prediction <- predict(forest, newdata=test, type='class') 
mytable <- table(test$class_w,prediction) 
sum(mytable[row(mytable) != col(mytable)])/sum(mytable)#show error 

調用森林對象我得到的混淆矩陣:

 A  B C  class.error 
A 498 79 170 0.3333333 
B 115 353 237 0.4992908 
C 96  99 967 0.1678141 

例如測試數據集

id |class_w| valueA | valueB | 
1 | C | 0.254 | 0.334 | 
2 | A | 0.654 | 0.334 | 
3 | A | 0.554 | 0.314 | 
4 | B | 0.454 | 0.224 | 
5 | C | 0.354 | 0.332 | 
6 | C | 0.264 | 0.114 | 
7 | C | 0.264 | 0.664 | 

我想知道我是否可以創建一個新的數據集,其中包含兩列,即前一個數據集的ID和預測的響應(RF給了)。 例如

row id of test dataset | predicted response 
1      | A #failed 
2      | B #failed 
3      | B #failed 
4      | B #TRUE! 

在此先感謝您的幫助。

+0

嗨joran。我的意思是,如果可能的話,要知道數據集中每一行的預測值,並通過使用一個函數來標記響應,如df $ RF_Prediction < - predicted_value – 2013-04-22 21:09:49

+0

我仍然不明白。你只是想'測試$ RF_prediction < - 預測'?它們應該按照相同的順序。 (你不是指'type =「response」'?) – joran 2013-04-22 21:14:52

+0

我會編輯這個問題給我一分鐘 – 2013-04-22 21:17:30

回答

3

我想你可以簡單地尋求建立一個新的數據幀:

data.frame(id = test$id,response = prediction) 

這假定id其實是在test列,而不是行的名稱。如果他們是rownames,那麼你想做的事:

data.frame(id = rownames(id),response = prediction) 
+0

非常感謝Joran。 – 2013-04-22 21:43:36

1

的另一種方式來做到這一點是隻寫是這樣的:

yourNewDataSet$someNewColumnCreated= Predict(forest,yourNewDataSet,type="class") 

這應該給你一個新列您的新數據集名爲'someNewColumnCreated'

將包含應用於此新數據集時模型的所有預測。