2014-10-05 2 views
2

Я делаю классификацию несколько этикеток и оценка осуществляется precision_recall_fscore_support с average = 'samples':пример на основе F-оценка меньше, чем точность и отзыв в Sklearn

predict = array(([1,1,0,0], [1,0,0,1], [1,1,1,1])) 
expect = array(([1,1,1,1], [1,1,1,0], [1,0,0,0])) 
smp_report = precision_recall_fscore_support(expect, predict, average = 'samples') 
f_report = f1_score(expect, predict, average = 'samples') 

Есть три случая, в этом примере, и двоичное значение означает существование соответствующих четырех классов.

затем smp_report и f_report дайте мне (0.58333333333333337, 0.61111111111111105, 0.48888888888888893, None) и 0.488888888889 соответственно.

f-score не равен результату 2*smp_report[0]*smp_report[1]/(smp_report[0]+smp_report[1]), который является средним значением точности и отзыва.

Может ли кто-нибудь сказать мне, как Sklearn реализовать этот? Версия, которую я использую, - 0.15.0.

ответ

4

Scikit-learn сначала вычисляет точность, напоминание и гармоническую F-меру для каждого элемента в вашем наборе списков ([1,1,0,0], [1,0,0,1], [1 , 1,1,1]). Затем он вычисляет среднее значение этих значений точности, среднее значение этих значений возврата и среднее значение этих f-мер и возвращает эти средние значения. Это значения P, R и F, о которых вы сообщаете выше.

Полезно рассчитать значения точности, напоминания и f-меры для одного элемента в вашем списке. Для вычисления значения P, R и F для третьего элемента в списке, вы можете запустить:

import numpy as np 
from sklearn import metrics 

predict = np.array([[1,1,1,1]]) 
expect = np.array([[1,0,0,0]]) 
smp_report = metrics.precision_recall_fscore_support(expect, predict, beta=1, average = 'samples') 
f_report = metrics.f1_score(expect, predict, average = 'samples') 

print f_report, smp_report 

Выполнение этого кода дает 0.4 (0.25, 1.0, 0.40000000000000002). Значения внутри скобки указывают точность, напоминание и f-меру для классификации (в указанном порядке). Как вы можете видеть, диафрагменное мера является гармоническое среднее между точностью и отзывом:

2 * [(.25 * 1)/(.25 + 1) ] = .4 

Заменив свои первые два списка в коде выше, вы можете вычислить точность, напомним, и гармоническую F- меры по каждому из трех элементов в наборе данных:

первых значений: запись 0.666666666667 (1.0, 0.5, 0.66666666666666663)

второго элемента зНАЧЕНИЕ 0.4 (0.5, 0.33333333333333331, 0.40000000000000002)

третьего элемента значение 0.4 (0.25, 1.0, 0.40000000000000002)

SK затем вычисляет среднюю точность среди этих точных значений (т.е. 1 + 0,5 + 0,25/3 = .5833333333333333), средние напомнит среди этих значений вызова (.5 + .333 + 1/3 = 0.61111111111111105), а средняя f-мера среди этих f-мер (.666 + .4 + .4/3 = 0.48888888888888893) и возвращает эти средние значения. Это значения, о которых вы сообщаете выше. SK вычисляет среднее значение гармоник для каждого классификационного события - оно просто возвращает среднее значение этих гармонических средств.

+0

Извините за ввод в заблуждение, что мне интересно, почему f-оценка НЕ ​​равна гармоническому среднему точности и отзыва, который равен 2 * 0,58 * 0,61/(0,58 + 0,61) = 0,59? Разве это не f-оценка? Различается ли он в многозазорном случае? – Francis

+0

F-оценка * * эквивалентна среднему значению гармоник средней точности и средним значениям отзыва для трех элементов в вашем наборе. SK вычисляет точность каждого события классификации и получает .666, .5 и .25. Затем он принимает среднее значение и получает .583333 (это значение точности, которое вы видите.) Затем он вычисляет значение отзыва для каждого упражнения классификации (.5, .333, .4) и принимает среднее значение (= 0,611). Затем он принимает гармоническую f-меру для каждого экземпляра классификации (.666, .4, .4) и принимает среднее значение (.488). – duhaime

+0

Другими словами, для каждого события классификации SK вычисляет точность и отзыв, затем вычисляет их среднее гармоническое значение. Затем, вычисляя каждое из этих значений для каждого события классификации, SK вычисляет средства этих значений (т. Е. Среднее значение точности в событиях классификации, среднее значение отзыва по событиям классификации и среднюю f-меру по событиям классификации) и возвращает эти средние значения в выводе, который вы публикуете выше. Проясняет ли это? – duhaime