关于这个链接Predicted probabilities in R ranger package,我有一个问题。
假设我有一个混合的数据框架,df (由因子和数值变量组成),我想使用ranger进行分类。我将这个数据帧拆分为测试集和训练集,分别为Train_Set和Test_Set。BiClass是我的预测因子变量,由0和1 (2级)组成
我想使用以下命令使用ranger计算类别概率并将其附加到数据帧:
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)我得到以下错误: Error in table(Test_Set$BiClass,pred$predictions):所有参数必须具有相同的长度
我做错了什么?
发布于 2020-03-31 23:13:32
对于你的第一个问题,是,它显示了每一行为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这将遍历概率的每一行,根据哪一列具有最大概率返回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))https://stackoverflow.com/questions/60948668
复制相似问题