2014-01-27 6 views
1

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

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) 

Я предполагаю, я получу что-то подобное этому послесловия - но как я интерпретирую пороги в этом случае? How to plot a ROC curve for a knn model

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

То, что я пытался до сих пор (опять же в среднем):

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

+0

Найдено это документ, который описывает несколько usecases решить подобную проблему https://ccrma.stanford.edu/workshops/mir2009/references/ROCintro.pdf «Введение в графах РПЦ: Том Фосетт» – ekta

+0

Другая возможность поиска сетки для вычисления пороговых значений, которые дают максимальный tpr и наименьший fpr. Подробнее здесь, http://stackoverflow.com/questions/13370570/elegant-grid-search-in-python-numpy и http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.brute .html # scipy.optimize.brute – ekta

ответ

3

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

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

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

  • Вы должны убедиться, что ваш классификатор был обучен таким образом, что имеет смысл с анализом РПЦ. Если вы скажете pos_label=5 в roc_curve, и ваш классификатор был поездом, чтобы распознать 5 как промежуточное звено между 4 и 6, вы наверняка ничего не принесете здесь
  • Если вы получаете AUC < 0.5, это означает, что вы смотрите на него в неправильный путь (и вы должны отменить свои прогнозы)
  • В целом анализ ROC полезен для двоичной классификации. Имеет ли смысл многопроцессорные проблемы, зависит от случая, и это может быть не так.
+0

Благодарим вас за объяснение и ресурс - заглянем в него. Удивительно знать, что существует «усреднение». +1. Другая вещь, которую я обнаружил озадачивающей, - это мой clf.oob_score_ (из-за суммарного балла и оценочной оценки clf.(x_test, y_test) [Базисные вычисления доли правильных прогнозов на «метку»] были в диапазоне 74%, но AUC составлял в среднем около 53%, хотя AUC и эти показатели не коррелировали, надеялись, что AUC - любые указания сделать это лучше? – ekta