Построение нескольких кривых ROC или средней кривой из меток нескольких классов (полиномиальная регрессия)

У меня есть набор данных с несколькими дискретными метками, скажем, 4,5,6. На этом я запускаю ExtraTreesClassifier (я также буду запускать послесловие Multinomial logit для тех же данных, это всего лишь короткий пример), как показано ниже. :

from sklearn.ensemble import ExtraTreesClassifier
from sklearn.metrics import roc_curve, auc

clf = ExtraTreesClassifier(n_estimators=200,random_state=0,criterion='gini',bootstrap=True,oob_score=1,compute_importances=True)
# Also tried entropy for the information gain
clf.fit(x_train, y_train)
#y_test is test data and y_predict is trained using ExtraTreesClassifier
y_predicted=clf.predict(x_test)

fpr, tpr, thresholds = roc_curve(y_test, y_predicted,pos_label=4) # recall my labels are 4,5 and 6
roc_auc = auc(fpr, tpr)
print("Area under the ROC curve : %f" % roc_auc)

Вопрос в том, есть ли что-то вроде средней кривой ROC - в основном я мог бы сложить все tpr и fpr отдельно для КАЖДОГО значения метки, а затем взять средства (кстати, будет ли это иметь смысл?) - а потом просто позвони

# Would this be statistically correct, and would mean something worth interpreting?
roc_auc_avearge = auc(fpr_average, tpr_average)
print("Area under the ROC curve : %f" % roc_auc)

Я предполагаю, что получу что-то похожее на это послесловие, но как мне интерпретировать пороговые значения в этом случае? Как построить кривую ROC для knn модель

Поэтому, пожалуйста, также укажите, могу ли я получить индивидуальные пороговые значения в этом случае и почему один подход лучше (статистически) над другим?

Что я пробовал до сих пор (кроме усреднения):

При изменении pos_label = 4, затем 5 и 6 и построении кривых roc я вижу очень низкую производительность, даже меньшую, чем y = x (совершенно случайный и случай tpr = fpr). Как мне подойти к этой проблеме?


person ekta    schedule 27.01.2014    source источник
comment
Нашел этот документ, в котором описаны несколько вариантов использования для решения схожей проблемы ccrma.stanford.edu/workshops /mir2009/references/ROCintro.pdf Введение в графики ROC: Том Фосетт   -  person ekta    schedule 29.05.2014
comment
Другой возможностью является поиск по сетке для вычисления пороговых значений, которые дают максимальное tpr и наименьшее fpr. Подробнее см. stackoverflow.com/questions/13370570 / и docs.scipy.org/doc/scipy/reference/generated/   -  person ekta    schedule 30.05.2014


Ответы (1)


Усреднение кривой ROC было предложено Hand & Till в 2001 году. Они в основном вычисляют кривые ROC для всех пар сравнения (4 против 5, 4 против 6 и 5 против 6) и усредняют результат.

Когда вы вычисляете кривую ROC с pos_label=4, вы неявно говорите, что другие метки являются отрицательными (5 и 6). Обратите внимание, что это немного отличается от того, что было предложено Hand & Till.

Несколько примечаний:

  • Вы должны убедиться, что ваш классификатор был обучен способом, который имеет смысл с вашим анализом ROC. Если вы скажете pos_label=5 в roc_curve, и ваш классификатор был обучен распознавать 5 как промежуточное звено между 4 и 6, вы наверняка не получите здесь ничего полезного.
  • Если у вас AUC <0,5, это означает, что вы смотрите на него неправильно (и вам следует изменить свои прогнозы).
  • В целом ROC-анализ полезен для бинарной классификации. Имеет ли это смысл для задач с несколькими классами зависит от регистра, и это может быть не так для вас.
person Calimo    schedule 27.01.2014
comment
Спасибо за объяснение и ресурс - разберусь. Приятно знать, что усреднение существует. +1. Другая вещь, которая меня озадачила, - это мой clf.oob_score_ (оценка вне пакета и оценка прогноза clf.score (x_test, y_test) [в основном вычисляет долю правильных прогнозов на этикетку], оба были в диапазоне 74%, но AUC была около В среднем 53% - хотя AUC и эти показатели не коррелируют, можно было надеяться на лучшую AUC - есть ли показания к тому, чтобы сделать это лучше? - person ekta; 27.01.2014