Матрица путаницы дает разные результаты в модели Keras tf == 2.3.0 - PullRequest
0 голосов
/ 04 августа 2020

С последовательным прогнозированием модели Keras,

Чтобы получить метки классов, мы можем сделать

yhat_classes1 = Keras_model.predict_classes(predictors)[:, 0] #this shows deprecated warning in tf==2.3.0

WARNING:tensorflow:From <ipython-input-54-226ad21ffae4>:1: Sequential.predict_classes (from tensorflow.python.keras.engine.sequential) is deprecated and will be removed after 2021-01-01.
Instructions for updating:
Please use instead:* `np.argmax(model.predict(x), axis=-1)`,   if your model does multi-class classification   (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype("int32")`,   if your model does binary classification   (e.g. if it uses a `sigmoid` last-layer activation).

так

yhat_classes2 = np.argmax(Keras_model.predict(predictors), axis=-1)

С метками первого класса, если я создаю путаницу матрица, я получаю

matrix = confusion_matrix(actual_y, yhat_classes1)
 [[108579   8674]
 [  1205  24086]]

Но с метками второго класса с матрицей путаницы я получаю 0 для истинно положительных и ложноположительных

matrix = confusion_matrix(actual_y, yhat_classes2)
 [[117253      0]
 [ 25291      0]]

Могу ли я узнать, в чем моя проблема?

1 Ответ

1 голос
/ 04 августа 2020

Матрица путаницы возвращает 2 строки / столбца, что наводит меня на мысль, что у вас есть два класса. В предупреждении конкретно говорится, что вам следует использовать эту строку для двоичной классификации, что вы и делаете:

(model.predict(x) > 0.5).astype("int32")

Пожалуйста, используйте вместо этого: * np.argmax(model.predict(x), axis=-1), если ваша модель выполняет мультиклассовую классификацию (например, если она использует активацию последнего уровня softmax). * (model.predict(x) > 0.5).astype("int32"), если ваша модель выполняет бинарную классификацию (например, если она использует активацию последнего уровня sigmoid).

Ошибка заключается в том, что вы использовали np.argmax(model.predict(X), axis=-1) для вывода 1D, поэтому всегда возвращается один и тот же столбец (потому что он только один, поэтому максимальное значение будет в этом столбце). Это объясняет, что все ваши предсказанные значения находятся в одном столбце вашей матрицы путаницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...