0

我正在尝试计算一个非常大的数据帧的多分类问题的混淆矩阵,该矩阵被划分并缩放为 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(首选,因为插入符号仅解释 upt0 53 个级别?)和插入符号获得多类分类的混淆矩阵?

4

1 回答 1

0

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

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

这将使您在confusionMatrix可能的情况下进行比较。

于 2021-08-04T14:38:31.933 回答