Я пытаюсь понять и построить TPR/FPR для разных типов классификаторов. Я использую kNN, NaiveBayes и Decision Trees в R. С kNN я делаю следующее:
clnum <- as.vector(diabetes.trainingLabels[,1], mode = "numeric")
dpknn <- knn(train = diabetes.training, test = diabetes.testing, cl = clnum, k=11, prob = TRUE)
prob <- attr(dpknn, "prob")
tstnum <- as.vector(diabetes.testingLabels[,1], mode = "numeric")
pred_knn <- prediction(prob, tstnum)
pred_knn <- performance(pred_knn, "tpr", "fpr")
plot(pred_knn, avg= "threshold", colorize=TRUE, lwd=3, main="ROC curve for Knn=11")
где diabetes.trainingLabels [, 1] - это вектор меток (класс), которые я хочу предсказать, диабет. Обучение - это данные обучения и диабет .testing - это test.data.
Сюжет выглядит следующим образом:
Значения, хранящиеся в атрибуте prob, представляют собой числовой вектор (десятичный от 0 до 1). Я преобразовываю фактор меток классов в числа, а затем я могу использовать его с функцией prediciton/performance из библиотеки ROCR. Не 100% уверен, что я делаю это правильно, но, по крайней мере, это работает.
Для NaiveBayes и Decision Trees, с параметром prob/raw, определенным в функции прогнозирования, я не получаю ни одного числового вектора, а вектор списков или матрицы, где определенная вероятность для каждого класса (я думаю), например:
diabetes.model <- naiveBayes(class ~ ., data = diabetesTrainset)
diabetes.predicted <- predict(diabetes.model, diabetesTestset, type="raw")
и диабет. Предполагается:
tested_negative tested_positive
[1,] 5.787252e-03 0.9942127
[2,] 8.433584e-01 0.1566416
[3,] 7.880800e-09 1.0000000
[4,] 7.568920e-01 0.2431080
[5,] 4.663958e-01 0.5336042
Вопрос заключается в том, как использовать его для построения кривой ROC и почему в kNN я получаю один вектор и для других классификаторов, я получаю их отдельно для обоих классов?