首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ranger预测数据帧中每行的分类概率

Ranger预测数据帧中每行的分类概率
EN

Stack Overflow用户
提问于 2020-03-31 18:40:49
回答 1查看 1K关注 0票数 1

关于这个链接Predicted probabilities in R ranger package,我有一个问题。

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

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

代码语言:javascript
复制
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的概率?我的理解正确吗?

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

代码语言:javascript
复制
pred = predict(Biclass.ranger, data=Test_Set, num.trees = 500, type='response', verbose = TRUE)
table(Test_Set$BiClass, pred$predictions)

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

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 23:13:32

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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")

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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 

在您的情况下,您可以直接执行以下操作:

代码语言:javascript
复制
confusionMatrix(table(max.col(probabilities)-1,Test_Set$BiClass))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60948668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档