RO C Curve Ranger - PullRequest
       50

RO C Curve Ranger

1 голос
/ 01 апреля 2020

Я пытаюсь вычислить RO C Curve и AU C, используя рейнджер для биномиальной классификации (0 и 1), где переменная ответа определяется как BiClass.

Предположим, я произнес Фрейм данных к Train_Set и Test_Set (75% и 25% соответственно) и вычислить вероятности двоичного класса, используя:

library(ranger)
library(ROCR)
library(mlr)
library(pROC)
library(tidyverse)

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

pred <- predict(BiClass.ranger, data = Test_Set, num.trees = 500, type='response', verbose = TRUE)

Мое намерение теперь состоит в том, чтобы вычислить кривую RO C (и AU C). Я попробовал следующий код, с помощью которого я получаю кривую RO C (используя пакеты ROCR и mlr):

pred_object <- prediction(pred$predictions[,2], Test_Set$BiClass)

per_measure <- performance(pred_object, "tnr", "fnr")

plot(per_measure, col="red", lwd=1)

abline(a=0,b=1,lwd=1,lty=1,col="gray")

Или, наоборот, используя пакет pRO C:

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

probabilities$predic <- colnames(probabilities)[max.col(probabilities,ties.method="first")] # For each row, return the column name of the largest value from 0 and 1 columns (prediction column). This will be a character type

probabilities$prednum <- as.numeric(as.character(probabilities$predic)) # create prednum as a numeric data type in probabilities

probabilities <- dplyr::mutate_if(probabilities, is.character, as.factor) # convert character to factor

probabilities <- cbind(probabilities,BiClass=Test_Set$BiClass) # append BiClass. This data frame contains the response variable from the Test_Data, along with prediction (prednum) and probability classes (0 and 1)

ROC_ranger <- pROC::roc(Table$BiClass, pred$predictions[,2])

plot(ROC_ranger, col = "blue", main = "ROC - Ranger")

paste("Accuracy % of ranger: ", mean(Test_Set$BiClass == round(pred$predictions[,2], digits = 0))) # print the performance of each model

Полученная кривая RO C приведена ниже: enter image description here

У меня есть следующие вопросы:

1) Как установить пороговое значение и построить график матрица путаницы для установленного порога?

Я вычисляю матрицу путаницы в настоящее время, используя:

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

max.col(probabilities) - 1

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

2) Как рассчитать оптимальное значение страховки (глобальное значение, при котором у меня больше истинных положительных сторон или истинные негативы) через оптимизацию?

Опять же, ссылаясь на pRO C и рекомендации, предложенные его автором с использованием:

myroc <- pROC::roc(probabilities$BiClass, probabilities$`1`)

mycoords <- pROC::coords(myroc, "all", transpose = FALSE)

plot(mycoords$threshold, mycoords$specificity, type="l", col="red", xlab="Cutoff", ylab="Performance")

lines(mycoords$threshold, mycoords$sensitivity, type="l", col="blue")

legend(0.23,0.2, c("Specificity", "Sensitivity"), col=c("red", "blue"), lty=1)

best.coords <- coords(myroc, "best", best.method="youden", transpose = FALSE)

abline(v=best.coords$threshold, lty=2, col="grey")

abline(h=best.coords$specificity, lty=2, col="red")

abline(h=best.coords$sensitivity, lty=2, col="blue")

Я смог нарисовать эту кривую, используя индекс Юдена :

![enter image description here] 2

Означает ли это, что у вас не так много свободы для изменения порога, чтобы играть со специфичностью и чувствительностью, так как пунктирная синяя и красные линии не далеко друг от друга?

3) Как ЭАУЛЯЦИЯ АС C?

Я рассчитал AU C, снова используя pRO C, следуя указаниям его автора. См. Ниже:

ROC_ranger <- pROC::roc(probabilities$BiClass, probabilities$`1`)
ROC_ranger_auc <- pROC::auc(ROC_ranger)
paste("Area under curve of random forest: ", ROC_ranger_auc) # AUC of the model

Наконец, цель состоит в том, чтобы увеличить истинные отрицательные значения, которые в настоящее время определены 1 в BiClass и, конечно, истинные положительные значения (определенные 0 в BiClass) в матрице путаницы. В настоящее время точность моего алгоритма классификации составляет 0,74, а AU C составляет 0,81 соответственно.

...