Ошибка значения: Метрики классификации не могут обрабатывать сочетание показателей с несколькими метками и целей с непрерывным выводом.

#python #tensorflow #keras #scikit-learn #classification

Вопрос:

Я не знаю, в чем проблема и почему я получаю эту ошибку:

Ошибка значения: Метрики классификации не могут обрабатывать сочетание показателей с несколькими метками и целей с непрерывным выводом.

Что я могу попытаться решить эту проблему?

Вот код:

 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from sklearn.datasets import make_classification from sklearn.preprocessing import OneHotEncoder, MinMaxScaler from sklearn.model_selection import train_test_split tf.random.set_seed(0)  # generate the data X, y = make_classification(n_classes=6, n_samples=1000, n_features=10, n_informative=10, n_redundant=0, random_state=42) print(y.shape) # (1000, )  # split the data X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)  # one-hot encode the target enc = OneHotEncoder(sparse=False, handle_unknown='ignore') enc.fit(y_train.reshape(-1, 1)) y_train = enc.transform(y_train.reshape(-1, 1)) y_test = enc.transform(y_test.reshape(-1, 1)) print(y_train.shape, y_test.shape) # (750, 6) (250, 6)  # scale the features scaler = MinMaxScaler() scaler.fit(X_train) X_train = scaler.transform(X_train) X_test = scaler.transform(X_test)  # define the model model = Sequential() model.add(Dense(units=30, activation='relu')) model.add(Dense(units=15, activation='relu')) model.add(Dense(6, activation='softmax'))  # fit the model model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x=X_train, y=y_train, epochs=3, batch_size=10, validation_data=(X_test, y_test))  predictions = model.predict(X_test)  confusion_matrix(y_test,predictions)  print(classification_report(y_lab,predictions))   

Ответ №1:

Причина ошибки заключается в том, что вы сравниваете метку с одной горячей меткой y_test с меткой вероятности класса, которая оценивается моделью predictions . Быстрым решением было бы преобразование обоих в простые категориальные метки, как показано ниже:

 confusion_matrix(np.argmax(y_test, axis=1), np.argmax(predictions, axis=1)) classification_report(np.argmax(y_test, axis=1), np.argmax(predictions, axis=1))  

Ответ №2:

Это решит проблему:

 y_test_arg=np.argmax(y_test,axis=1) Y_pred = np.argmax(predictions,axis=1) print(confusion_matrix(y_test_arg, Y_pred))   

Комментарии:

1. Можете ли вы объяснить, как или почему это решает проблему, путем редактирования вашего ответа?