【问题标题】:Get the accuracy of a random forest in R获取R中随机森林的准确性
【发布时间】:2015-04-24 07:42:24
【问题描述】:

我用我的数据创建了一个random forest

fit=randomForest(churn~., data=data_churn[3:17], ntree=1,
                 importance=TRUE, proximity=TRUE)

我可以很容易地看到我的confusion matrix

conf <- fit$confusion
> conf
     No Yes class.error
No  945  80  0.07804878
Yes  84 101  0.45405405

现在我需要知道随机森林的准确性。我四处搜索并意识到caret 库有一个confusionMatrix 方法,它获取混淆矩阵并返回准确性(以及许多其他值)。但是,该方法需要另一个名为"reference" 的参数。我的问题是如何为获得随机森林准确性的方法提供参考? 而且......这是获得随机森林准确性的正确方法吗?

【问题讨论】:

  • 如果您只是在命令提示符下键入fit,则会打印出混淆矩阵和袋外 (OOB) 错误。 OOB 误差是总体分类误差。您还可以根据混淆矩阵计算 OOB 误差。在您的情况下,它是 164/1210(错误分类的观察次数与观察总数的比值)。然而,如果你真的想知道你的模型有多好,你应该有单独的训练数据来创建模型和测试数据(在模型构建过程中没有使用)来检查模型的性能。
  • @eipi10 谢谢!所以我假设准确度是 1-OOB 错误。我说的对吗?
  • 是的。没错。
  • 仅供参考 你知道选择ntree=1 只会得到一棵rpart 树,而不是森林吗?
  • @smci 是的。谢谢你的评论。我会改变正在执行的树的数量。

标签: r random-forest confusion-matrix


【解决方案1】:

使用randomForest(..., do.trace=T)查看训练期间的OOB错误,按类和ntree。

(仅供参考,您选择了ntree=1,因此您只会得到一个 rpart 决策树,而不是森林,这违背了使用 RF 以及随机选择特征和样本子集的目的。您可能想要改变 ntree 的值。)

在训练之后,您可以从混淆矩阵的最右边一列中得到每个类别的错误,正如您已经发现的那样:

> fit$confusion[, 'class.error']
class.error
No         Yes
0.07804878 0.45405405

(你可能还想设置options('digits'=3) 看不到那些过多的小数位)

关于将类错误列表 (accuracies = 1 - errors) 转换为一个总体准确度数字,这很容易做到。您可以使用均值、类加权均值、调和均值(准确度,而不是错误)等。这取决于您的应用程序和错误分类的相对惩罚。你的例子很简单,它只有两个类。

(或者例如,有更复杂的评估者间一致性度量)

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2020-08-30
    相关资源
    最近更新 更多