在R中获取随机森林的准确率。

4
我已经创建了一个由数据生成的随机森林:
fit=randomForest(churn~., data=data_churn[3:17], ntree=1,
                 importance=TRUE, proximity=TRUE)

我可以轻松地查看我的混淆矩阵:
conf <- fit$confusion
> conf
     No Yes class.error
No  945  80  0.07804878
Yes  84 101  0.45405405

现在我需要知道随机森林的准确度。我搜索并了解到,caret库有一个confusionMatrix方法,该方法获取混淆矩阵并返回准确度(以及许多其他值)。但是,该方法需要另一个称为"reference"的参数。我的问题是,如何提供参考来获取我的随机森林的准确度?还有...这是否是获取随机森林准确度的正确方式?

3
如果您只在命令提示符处键入“fit”,将同时打印出混淆矩阵和袋外误差(OOB错误)。 OOB错误是总体分类错误率。您还可以从混淆矩阵中计算OOB错误。在您的情况下,它是164/1210(错分观测次数除以总观测次数)。但是,如果您真的想知道模型有多好,应该使用单独的训练数据创建模型和测试数据(未在建模过程中使用)来检查模型的性能。 - eipi10
@eipi10 谢谢!所以我假设准确率是1-OOB误差。我对吗? - Saba Jamalian
1
是的,没错。 - eipi10
2
你知道选择 ntree=1 只会得到一棵 rpart 树,而不是一个森林吗? - smci
@smci 是的。不过还是谢谢你的评论。我会改变执行中的树的数量。 - Saba Jamalian
1个回答

6
使用randomForest(..., do.trace=T)可以在训练过程中查看OOB误差,按类别和ntree进行查看。
(FYI,您选择了ntree=1,因此您只会得到一个rpart决策树,而不是一个随机森林,这有点违背使用RF以及随机选择特征和样本子集的目的。您可能需要改变ntree值。)
在训练之后,您可以从混淆矩阵的最右列获取每个类别的错误率,就像您已经发现的那样:
> fit$confusion[, 'class.error']
class.error
No         Yes
0.07804878 0.45405405

您可能想设置options('digits'=3),以便不显示过多的小数位。

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

(或例如,还有更复杂的互评一致性指标)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接