В последние дни я анализировал производительность реализации Random Forest в R и различных доступных инструментов, чтобы получить:
- AUC
- Чувствительность
- Специфичность
Таким образом, я использовал два разных метода:
- mroc и coords из библиотеки pROC, чтобы получить производительность модели в различных точках отсечения.
- confusionMatrix из библиотеки caret, чтобы получить оптимальную производительность модели (AUC, точность, чувствительность, специфичность, ...)
Дело в том, что я понял, что есть некоторые различия между обоими подходами.
Я разработал следующий код:
suppressMessages(library(randomForest))
suppressMessages(library(pROC))
suppressMessages(library(caret))
set.seed(100)
t_x <- as.data.frame(matrix(runif(100),ncol=10))
t_y <- factor(sample(c("A","B"), 10, replace = T), levels=c("A","B"))
v_x <- as.data.frame(matrix(runif(50),ncol=10))
v_y <- factor(sample(c("A","B"), 5, replace = T), levels=c("A","B"))
model <- randomForest(t_x, t_y, ntree=1000, importance=T);
prob.out <- predict(model, v_x, type="prob")[,1];
prediction.out <- predict(model, v_x, type="response");
mroc <- roc(v_y,prob.out,plot=F)
results <- coords(mroc,seq(0, 1, by = 0.01),input=c("threshold"),ret=c("sensitivity","specificity","ppv","npv"))
accuracyData <- confusionMatrix(prediction.out,v_y)
Если вы сравните переменные results и precisionData, вы увидите, что зависимость между чувствительностью и специфичностью обратная.
То есть результаты confusionMatrix:
Confusion Matrix and Statistics
Reference
Prediction A B
A 1 1
B 2 1
Accuracy : 0.4
95% CI : (0.0527, 0.8534)
No Information Rate : 0.6
P-Value [Acc > NIR] : 0.913
Kappa : -0.1538
Mcnemar's Test P-Value : 1.000
Sensitivity : 0.3333
Specificity : 0.5000
Pos Pred Value : 0.5000
Neg Pred Value : 0.3333
Prevalence : 0.6000
Detection Rate : 0.2000
Detection Prevalence : 0.4000
Balanced Accuracy : 0.4167
'Positive' Class : A
Но если я ищу такие Чувствительность и Специфичность в вычислении координат, я обнаруживаю, что они поменялись местами:
sensitivity specificity ppv npv
0.32 0.5 0.3333333 0.3333333 0.5000000
По-видимому, Sensitivity и Specificity противоположны в coords и confusionMatrix.
Принимая во внимание, что confusionMatrix правильно определяет положительный класс, я предполагаю, что это хорошая интерпретация чувствительности и специфичности.
Мой вопрос: Есть ли способ заставить координаты интерпретировать положительные и отрицательные классы так, как я хочу?