【问题标题】:How to get correct class, predicted class and prediction probability in Random Forest in R?如何在R中的随机森林中获得正确的类、预测类和预测概率?
【发布时间】:2016-12-04 01:40:28
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: r classification probability random-forest


    【解决方案1】:

    我使用 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
    

    【讨论】:

    • 你在哪里初始化/赋值给iris.rf对象?
    • 对不起,应该澄清一下:我按照你上面的代码(iris.rf
    猜你喜欢
    • 2021-02-11
    • 2021-12-04
    • 2015-05-03
    • 1970-01-01
    • 2018-10-23
    • 2019-05-04
    • 2017-04-24
    • 2018-10-04
    • 2014-08-07
    相关资源
    最近更新 更多