TypeError: f1_score() получил неожиданный аргумент ключевого слова «средний»

Я извлекаю значение F1_macro, используя функцию f1_score sklearn.

Я делаю это для своей сети Keras, это код:

Y_dev_pred = self.model.predict([self.dev[0], self.dev[1]], batch_size=self.BatchSize, verbose=0)
Y_dev_pred = np.argmax(Y_dev_pred, axis=1)
self.Y_dev = np.argmax(self.dev[2], axis=1)
print('####### ', self.Y_dev.shape, ' ', Y_dev_pred.shape)
print(self.Y_dev, ' ### ', Y_dev_pred)
print(f1_score(self.Y_dev, Y_dev_pred, average='macro'))

Выход:

#######  (19647,)   (19647,)
[1 0 0 ... 2 0 2]  ###  [0 0 0 ... 2 1 0]

Traceback (most recent call last):
  File "main.py", line 185, in <module>
    deep.run_model(reTrain=True)
  File ".../models/DL.py", line 477, in run_model
    self.evaluate_on_test()
  File ".../models/DL.py", line 448, in evaluate_on_test
    print(f1_score(self.Y_dev, Y_dev_pred, average='macro'))
TypeError: f1_score() got an unexpected keyword argument 'average'

В чем проблема, я что-то пропустил?

Это странно, в документах есть очень похожие вызовы в качестве примеров, и подпись указывает, что это должно работать. Это последняя версия scikit-learn, верно? Может быть, он вызывает какой-то другой метод f1_score?

shriakhilc 30.05.2019 13:18

Наиболее вероятная причина в том, что ваша версия sklearn неверна.

gmds 30.05.2019 13:18

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

shriakhilc 30.05.2019 13:21

@ TheGamer007, Да, я обнаружил это сейчас. Я вызывал другой метод f1_score .. спасибо

Minions 30.05.2019 13:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
3 675
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Проверьте, имеет ли какая-либо из ваших меток y_true или y_predicted только два класса? проверьте уникальные значения в каждом. средний макрос работает только для мультикласса, если какая-либо из переменных имеет только два класса, он выдает такую ​​​​ошибку! и да, проверьте версию вашего sklearn,

Ответ принят как подходящий

Я получил эту ошибку, когда в моем коде была еще одна функция с именем f1_score.

Мой научный навык Name: scikit-learn Version: 0.24.2 Я все еще получаю эту проблему. Моя проблема мультиклассовая, а не бинарная. Если я уберу среднее значение, я получу эту ошибку Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'].

потому что у вас проблема с мультиклассом, но average='binary' установлен по умолчанию.

Minions 04.10.2021 18:07

Другие вопросы по теме