Для вашего первого вопроса да, он показывает вероятность того, что каждая строка равна 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))