Ranger Predicted Class 数据框中每一行的概率

Ranger Predicted Class Probability of each row in a data frame

关于这个link,我有个问题

假设我有一个混合数据框 df(由因子和数字变量组成),我想使用 ranger 进行 class化。我将此数据框拆分为测试和训练集 Train_Set 和 Test_Set。 BiClass 是我的预测因子变量,由 0 和 1(2 个级别)组成

我想使用 ranger 使用以下命令计算 class 概率并将其附加到数据框:

Biclass.ranger <- ranger(BiClass ~ ., ,data=Train_Set, num.trees = 500, importance="impurity", save.memory = TRUE, probability=TRUE)

probabilities <- as.data.frame(predict(Biclass.ranger, data = Test_Set, num.trees = 200, type='response', verbose = TRUE)$predictions)

数据框概率是由 2 列(0 和 1)组成的数据框,行数等于 Test_Set 中的行数。

这是否意味着,如果我将此数据框附加或附加到 Test_Set 的概率作为最后两列,它会显示每行为 0 或 1 的概率?我的理解正确吗?

我的第二个问题,当我试图通过

计算混淆矩阵时
pred = predict(Biclass.ranger, data=Test_Set, num.trees = 500, type='response', verbose = TRUE)
table(Test_Set$BiClass, pred$predictions)

我收到以下错误: table(Test_Set$BiClass, pred$predictions) 错误: 所有参数必须具有相同的长度

我做错了什么?

对于你的第一个问题是的,它显示了每行是 0 或 1 的概率。使用下面的示例:

library(ranger)
idx = sample(nrow(iris),100)
data = iris
data$Species = factor(ifelse(data$Species=="versicolor",1,0))
Train_Set = data[idx,]
Test_Set = data[-idx,]

mdl <- ranger(Species ~ ., ,data=Train_Set,importance="impurity", save.memory = TRUE, probability=TRUE)
probabilities <- as.data.frame(predict(mdl, data = Test_Set,type='response', verbose = TRUE)$predictions)

我们随时可以检查他们是否同意:

par(mfrow=c(1,2))
boxplot(probabilities[,"0"] ~ Test_Set$Species,ylab="Prob 0",xlab="Actual label")
boxplot(probabilities[,"1"] ~ Test_Set$Species,ylab="Prob 1",xlab="Actual label")

不是最好的情节,但有时如果标签被翻转你会看到一些奇怪的东西。我们需要找到具有最大概率的列并分配标签,为此我们这样做:

max.col(probabilities) - 1
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0
[39] 0 0 0 0 0 0 0 0 0 0 0 0

这遍历每一行的概率 returns 1 或 2,具体取决于哪一列具有最大概率,我们只需从中减去 1 即可得到 0,1。对于混淆矩阵:

caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species))
Confusion Matrix and Statistics


     0  1
  0 31  2
  1  0 17

               Accuracy : 0.96            
                 95% CI : (0.8629, 0.9951)
    No Information Rate : 0.62            
    P-Value [Acc > NIR] : 2.048e-08 

对于你的情况,你可以这样做:

confusionMatrix(table(max.col(probabilities)-1,Test_Set$BiClass))