Если у вас нет особо старой версии pROC или у вас есть что-то, заставляющее глушить диагностические сообщения, оно должно сообщать вам, что оно делает:
> roc(data$label, data$score)
Setting levels: control = missing, case = good
Setting direction: controls < cases
Как вы можете видеть, оно использует «пропущенный»класс как контроль или отрицательный класс.
Он продолжает показывать вам, какие данные были использованы:
[...]
Data: data$score in 3 controls (data$label missing) < 16 cases (data$label good).
Снова вы можете заметить, что он использует «отсутствующую» метку в качестве элемента управления.
Наконец, он даетвам подсказка, как решить проблему:
[...]
Warning message:
In roc.default(data$label, data$score) :
'response' has more than two levels. Consider setting 'levels' explicitly or using 'multiclass.roc' instead
В вашем случае проще всего установить аргумент levels
, как это было предложено:
> roc(data$label, data$score, levels=c("good", "bad"))
Setting direction: controls > cases
Call:
roc.default(response = data$label, predictor = data$score, levels = c("good", "bad"))
Data: data$score in 16 controls (data$label good) > 1 cases (data$label bad).
Area under the curve: 0.8125
Теперь он правильно использует добро/ плохие уровни, как вы и просили.
И последнее: обратите внимание, что pROC по-прежнему автоматически устанавливает направление:
Setting direction: controls > cases
Вы должны убедиться, что это соответствует направлению (независимо от того, положительные случаивыше или ниже, чем отрицательные значения), полученные вами на тренировочных данных.
train.roc <- roc(train.data$label, train.data$score, levels=c("good", "bad"))
roc(data$label, data$score, levels=c("good", "bad"), direction=train.roc$direction)
Если этого не сделать, вы можете внести некоторую погрешность в свои AUC, и вы можете подумать, что ваш предиктор работает великолепно, когда это не так.
Как правило, вы хотите установить аргументы levels
и direction
явно, когда это возможно. если направление между тренировками и тестированием меняется на противоположное.