Как решить эти проблемы с перевернутой кривой ROC, малым AUC и срезом? - PullRequest
1 голос
/ 30 апреля 2019

Я строю эту ROC-кривую из моей модели SVM, но кривая получилась перевернутой. Кроме того, хотя мой прогноз SVM имеет высокую точность (~ 93%), моя кривая ROC показывает, что моя площадь под кривой составляет всего около 2,7%. Более того, он говорит мне, что оптимальным значением отсечения является бесконечность, а это не то, что я ожидал от подгонки моей модели.

Я подогнал свою модель SVM, используя встроенную функцию SVM, как в коде, который я показал ниже, а затем я предсказал, используя функцию предиката (). Затем я вычислил предсказание () и вычислил производительность (), значение отсечки и AUC (весь код показан ниже)

svm.fit <-  svm(label ~ NDAI + SD + CORR, data = trainSet, scale = FALSE, kernel = "radial", cost = 2, probability=TRUE)
svm.pred <- predict(svm.fit, testSet, probability=TRUE)
mean(svm.pred== testSet$label)*100
prediction.svm <- prediction(attr(svm.pred, "probabilities")[,2], testSet$label)
eval.svm <- performance(prediction.svm, "acc")
roc.svm <- performance(prediction.svm, "tpr", "fpr")

#identify best values and cutoff
max_index.svm <- which.max(slot(eval.svm, "y.values")[[1]])
max.acc_svm <- (slot(eval.svm, "y.values")[[1]])[max_index.svm]
opt.cutoff_svm <- (slot(eval.svm, "x.values")[[1]])[max_index.svm][[1]]
#AUC
auc.svm <- performance(prediction.svm, "auc")
auc.svm <- unlist(slot(auc.svm, "y.values"))
auc.svm <- round(auc.svm, 4)

plot(roc.svm,colorize=TRUE)
points(0.072, 0.93, pch= 20)
legend(.6,.2, auc.svm, title = "AUC", cex = 0.8)
legend(.8,.2, round(opt.cutoff_svm,4), title = "cutoff", cex = 0.8)

Я ожидаю, что выходной сигнал будет иметь значение AUC, близкое к 1, и небольшое обрезание, близкое к 0,5, с кривой с AUC, близкой к 1. Кто-нибудь сталкивался с подобной проблемой, подобной этой? Если да, как мне исправить мой код?

...