【问题标题】:Error while computing confusion matrix for multiclassification using ranger使用 ranger 计算多分类混淆矩阵时出错
【发布时间】:2021-10-09 16:00:18
【问题描述】:

我正在尝试计算一个非常大的数据框的多分类问题的混淆矩阵,它被划分并缩放为 Train_Scale 和 Test_Scale(训练集的比例用于缩放测试)集。

Ranger 是用来做造型的:

set.seed(123)
library(ranger)
library(caret)
Class.ranger <- ranger(Class~., data = Train_Scale, num.trees = 5000, importance = "impurity", save.memory = TRUE, probability = TRUE)

变量Class有5个级别:

str(Test_Scale$Class)
 Factor w/ 5 levels "A","B",..: 5 1 1 1 1 5 5 5 1 1 ...

验证在测试集上完成如下:

set.seed(123)
probabilitiesClass <- predict(Class.ranger, data = Test_Scale, num.trees = 5000, type='response', verbose = TRUE)

probabilitiesClass 是一个由 5 个组成的列表,如下所示:

尝试通过混淆矩阵解释结果时出现以下错误:

> caret::confusionMatrix(Test_Scale$Class, probabilitiesClass$predictions)
Error: `data` and `reference` should be factors with the same levels.

上图中的预测是否应该是因子(因为它目前是双倍的),并且由于 Class 是一个具有 5 个级别的因子?

或者,尝试使用表(注意:也没有出现 NA 值)会出现以下错误:

table(Test_Scale$Class, probabilitiesClass$predictions)
Error in table(Test_Scale$Class, probabilitiesClass$predictions): 
all arguments must have the same length

出了什么问题以及如何使用 ranger(首选,因为 caret 仅解释 upt0 53 个级别?)和 caret 获得多类分类的混淆矩阵?

【问题讨论】:

    标签: r validation prediction confusion-matrix r-ranger


    【解决方案1】:

    设置type = 'raw' 而不是response 以获得预测的class 而不是预测的概率。

    probabilitiesClass <- predict(
           Class.ranger,
           data = Test_Scale,
           num.trees = 5000,
           type='raw',
           verbose = TRUE
    )
    

    这将使您在confusionMatrix 中进行比较成为可能。

    【讨论】:

    • 当我使用 raw 而不是响应时出现以下错误:predict.ranger.forest 中的错误(森林,数据,predict.all,num.trees,类型,:错误:'的值无效type”。使用“response”、“se”、“terminalNodes”或“quantiles”。
    • 好的 - 那么我的通用答案不适用。您能否复制您的datacode 以便我们更好地查看?
    • 我用caret 对此进行了测试,它按预期工作 - 但ranger 没有。我没有现成的答案! \o/
    • 我已经在这个线程中提出了虹膜数据的代码:stackoverflow.com/questions/68664858/…
    猜你喜欢
    • 2021-10-10
    • 2018-04-01
    • 2017-09-25
    • 2018-04-09
    • 2018-03-02
    • 2019-07-07
    • 2020-06-23
    • 2017-02-25
    相关资源
    最近更新 更多