Я предполагаю, что у вас есть бинарные наблюдения в наборе {0,1}.
Вы можете преобразовать прогнозируемые значения в переменной phat в диапазон [0, 1], используя функцию логита:
phat_new = exp(phat)/(1+exp(phat))
Теперь вы знаете, каково прогнозируемое значение, phat_new, истинное значение наблюдений, val_y_matrix и процент единиц в вашем наборе проверочных данных, p. Один из способов построения ROC следующий:
исправить т. Это порог отсечки (в [0,1]) для модели. Вычислите следующее:
# percentage of 1 observations in the validation set,
p = length(which(val_y_matrix==1))/length(val_y_matrix)
# probability of the model predicting 1 while the true value of the observation is 0,
p_01 = sum(1*(phat_new>=t & val_y_matrix==0))/dim(val_x_matrix)[1]
# probability of the model predicting 1 when the true value of the observation is 1,
p_11 = sum(1*(phat_new>=t & val_y_matrix==1))/dim(val_x_matrix)[1]
# probability of false-positive,
p_fp = p_01/(1-p)
# probability of true-positive,
p_tp = p_11/p
# plot the ROC,
plot(p_fp, p_tp)
Интересно, есть ли лучший способ сделать это. Например, если вы используете деревья классификации, вы можете указать матрицу потерь в качестве входных данных для модели, и модель, которую вы получите, будет отличаться в зависимости от соотношения затрат вашей матрицы потерь. Это означает, что, изменяя соотношение затрат, вы получите разные модели, и разные модели будут разными точками на кривой ROC.
person
user1521587
schedule
12.07.2012
ROCR
не работает? Если нет, то в чем конкретно проблема? - person smci   schedule 08.03.2014