#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. Можете ли вы объяснить, как или почему это решает проблему, путем редактирования вашего ответа?