如何在R中的随机森林中获得正确的类,预测类和预测概率?

时间:2016-07-29 10:57:29

标签: r classification probability random-forest

我使用randomForest进行数据分类,我无法理解:

1-我们如何获取信息(最好是在3列的数据框中),它告诉我们testData中的真实分类(例如在下面的示例Species列中),由随机森林做出的预测,以及该预测的概率分数。例如,只考虑下面的数据集和1个案例,其中testData物种(随机森林的盲法信息)是 versicolor 但分类器错误地预测为 virginica 概率分数 0.67 。我想要这种信息但不知道如何获得此信息

2-我们如何得到testDatatrainingData的混淆矩阵,它也为我们提供了class.error,就像我们打印模型时一样。

data(iris)
set.seed(111)
ind <- sample(2, nrow(iris), replace = TRUE, prob=c(0.8, 0.2))
trainData <- iris[ind==1,]    
testData <- iris[ind==2,]
#grow forest
iris.rf <- randomForest(Species ~ ., data=trainData)
print(iris.rf)

Call:
 randomForest(formula = Species ~ ., data = trainData) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 2

        OOB estimate of  error rate: 3.33%
Confusion matrix:
           setosa versicolor virginica class.error
setosa         45          0         0  0.00000000
versicolor      0         39         1  0.02500000
virginica       0          3        32  0.08571429

**#predict using the training again...**
iris.pred <- predict(iris.rf, trainData)
table(observed = trainData$Species, predicted = iris.pred)

           predicted
observed     setosa versicolor virginica
  setosa         45          0         0
  versicolor      0         40         0
  virginica       0          0        35

**#Testing on testData**
irisPred<-predict(iris.rf, newdata = testData)
table(irisPred, testData$Species)

irisPred     setosa versicolor virginica
setosa          5          0         0
versicolor      0          8         1
virginica       0          2        14

1 个答案:

答案 0 :(得分:2)

我使用了caret包来运行随机森林和trainControl:

library(caret)
library(PerformanceAnalytics)

model <- train(Species ~ .,trainData,
           method='rf',TuneLength=3,
           trControl=trainControl(
             method='cv',number=10,
             classProbs = TRUE))
model$results

irisPred_species<-predict(iris.rf, newdata = testData)
irisPred_prob<-predict(iris.rf, newdata = testData, "prob")

out.table <- data.frame(actual.species = testData$Species, pred.species = irisPred_species, irisPred_prob)

您可以通过以下方式获取错误率:

iris.rf$err.rate

混乱矩阵:

iris.rf$confusion