Я пытаюсь понять, почему оценка F1 такая же, как в sklearn
. Я понимаю, что он рассчитывается как:
F1 = 2 * (precision * recall) / (precision + recall)
Мой код:
from sklearn.metrics import f1_score, precision_score, recall_score
...
fmeasure1 = f1_score(true_output, predicted_output, average="macro")
fmeasure2 = f1_score(true_output, predicted_output, average="micro")
precision = precision_score(true_output, predicted_output, average="macro")
recall = recall_score(true_output, predicted_output, average="macro")
print 2*(precision*recall)/(precision + recall), fmeasure1, fmeasure2
Значения, которые я получаю для своих данных:
0.785744255639 0.769527615775 0.984532095901
Я не понимаю, почему эти три ценности отличаются друг от друга. Я пробовал читать документацию здесь, но Я все еще заблудился.
Мой набор данных является многоуровневым и по своей природе очень несбалансированным. Какое из приведенных здесь значений является «правильным» значением и, соответственно, какой из параметров для среднего (например, «Нет», «микро», «макро», «вес») мне следует использовать?
Спасибо, и любая информация будет очень ценной.
1 ответ
Посмотрите на возвращаемое значение:
Returns:
f1_score : float or array of float, shape = [n_unique_labels]
F1 score of the positive class in binary classification or weighted average of the F1 scores of each class for the multiclass task.
Каждое значение представляет собой оценку F1 для этого конкретного класса, поэтому каждый класс может быть предсказан с разной оценкой.
Что касается лучшего результата.
best value at 1 and worst score at 0.[ \[From documentation\]][1]
Кстати, если вы имеете дело с сильно несбалансированными наборами данных, вам следует подумать о методах выборки или просто подвыборке из существующих данных, если это позволяет.
Если вы хотите получить среднее значение прогнозов average='weighted'
:
sklearn.metrics.f1_score(y_true, y_pred, labels=None, pos_label=1, average='weighted')
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.