Точность, Напомним, F-оценка требует равных входов - PullRequest
0 голосов
/ 05 мая 2019

Я смотрю на точность, отзыв и f-оценка, используя scikit-learn, используя:

from sklearn.metrics import `precision_score`

Тогда:

y_true = np.array(["one", "two", "three"])
y_pred = np.array(["one", "two"])

precision = precision_score(y_true, y_pred, average=None)
print(precision)

Возвращенная ошибка:

ValueError: Найдены входные переменные с непоследовательным количеством выборок: [3, 2]

Из-за несбалансированных входных массивов, почему для scikit-learn требуется одинаковое количество входов?Особенно при оценке отзыва (который, я бы подумал, требовал больше догадок, чем ответов).

Я могу реализовать свои собственные метрики или просто уменьшить массивы, чтобы они соответствовали.Я хочу быть уверен, что нет основополагающей причины, почему я не должен?

Ответы [ 2 ]

1 голос
/ 05 мая 2019

Это довольно просто, потому что здесь sklearn играет безопасную роль.

Не имеет смысла, что вы не выполняли 100% прогнозов для тестового набора.

Допустим, в вашем наборе данных есть 1М точек данных, но вы прогнозируете только 200К, это первые 200К точек?Последний?Распространение по всему?Как библиотека узнает, какие совпадения и какие?

Вы должны иметь соответствие 1: 1 на входе расчета метрики.Если у вас нет прогнозов для некоторых точек, отбросьте их (но убедитесь, что вы знаете, почему у вас нет таких прогнозов в первую очередь, если это не проблема с конвейером) - вы не хотите говорить, что выиметь 100% отзыва с точностью до 1%, и, в конце концов, вы прогнозировали только 10% набора данных.

1 голос
/ 05 мая 2019

Это действительно зависит от того, что означают y_true и y_pred в вашем случае. Но обычно y_true будет вектором, указывающим, какое истинное значение должно быть для каждого элемента y_pred. Я думаю, что это не ваш случай, и чтобы использовать метрики scikit-learn, вам нужно поместить их в этот формат.

Таким образом, в случае двоичной классификации точность будет:

correct_classifications = (y_true == y_pred).astype(int)
precision = sum(y_pred * correct_classifications) / sum(y_pred)

Здесь вы видите, что вам нужно, чтобы y_true и y_pred были одинаковой длины.

...