2016-06-06 3 views
2

Здравствуйте, я работаю с sklearn и для того, чтобы лучше понять показатели, я последовал следующий пример precision_score:Как sklearn вычисляет метрику точности_score?

from sklearn.metrics import precision_score 
    y_true = [0, 1, 2, 0, 1, 2] 

    y_pred = [0, 2, 1, 0, 0, 1] 
    print(precision_score(y_true, y_pred, average='macro')) 

результат, который я получил был следующее:

0.222222222222 

Я понимаю что sklearn вычисления, что приводит следующие действия:

  • для этикеток 0 точности TP/(TP + FP) = 2/(2 + 1) = 0,66
  • для этикеток 1 точности равен 0/(0 + 2) = 0
  • для печати этикеток 2 точность 0/(0 + 1) = 0

и, наконец, sklearn вычисляет значит точность всеми тремя метками: precision = (0.66 + 0 + 0)/3 = 0.22

этот результат дается, если принять эти параметры:

precision_score(y_true, y_pred, average='macro') 

с другой стороны, если принять эти параметры, изменяя средний = «микро»:

precision_score(y_true, y_pred, average='micro') 

тогда мы получим:

0.33 

и если мы возьмем среднее = 'взвешенная':

precision_score(y_true, y_pred, average='weighted') 

то получим:

0.22. 

Я не понимаю хорошо, как sklearn вычисляет эту метрику, когда средний параметр установлен на «взвешенный» или «микро», I r хотел бы оценить, сможет ли кто-нибудь дать мне ясное объяснение этому.

ответ

2

'micro':

Вычислить метрики глобально, рассматривая каждый элемент матрицы индикатора этикетки в качестве метки.

'macro':

Вычислить метрики для каждой метки, и найти их невзвешенное среднее. Этот не учитывает дисбаланс этикетки.

'weighted':

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

'samples':

Вычислить метрики для каждого экземпляра, и найти их среднее значение.

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html

Для мер поддержки: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html

В принципе, членство класса.

3.3.2.12. Рабочая характеристика приемника (ROC)

Функция roc_curve вычисляет кривую рабочих характеристик приемника или кривую ROC. Цитирование Википедии:

«Рабочая характеристика приемника (ROC), или просто кривая ROC, представляет собой графический график, который иллюстрирует работу системы бинарного классификатора по мере того, как порог ее дискриминации изменяется. Он создается путем построения фракции истинных положительных результатов из положительных значений (TPR = истинная положительная скорость) по сравнению с фракцией ложных срабатываний из негативов (FPR = ложноположительная скорость) при различных пороговых настройках. TPR также известен как чувствительности и FPR является один минус специфичность или истинный отрицательный темп «

TN/Правда Негатив. Случай был отрицательным и прогнозируемым отрицательным.

TP/True Положительный: случай положительный и прогнозируемый положительный.

FN/False Отрицательный: случай был положительным, но предсказал отрицательный.

FP/Ложные Положительный: случай был отрицательным, но предсказывал позитивные # Базовой терминологию

confusion = metrics.confusion_matrix(expected, predicted) 
print confusion,"\n" 
TN, FP = confusion[0, 0], confusion[0, 1] 
FN, TP = confusion[1, 0], confusion[1, 1] 

print 'Specificity:  ', round(TN/float(TN + FP),3)*100, "\n" 
print 'Sensitivity:  ', round(TP/float(TP + FN),3)*100, "(Recall)" 
+0

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

+0

Подумайте об этом как о причудливом способе сказать средневзвешенное значение по классу – Merlin

+0

спасибо, но знаете ли вы, если sklearn в документации определяет чувствительность и специфичность? – neo33

Смежные вопросы