Я получаю очень разные результаты по keras_metrics и sklearn.metrics - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь классифицировать текстовые данные. Я использую keras_metrics , чтобы получить точность, отзыв и оценку f1. Вот мой код архитектуры

model = Sequential()
model.add(Embedding(input_dim=500,output_dim=50,input_length=280))
model.add(Bidirectional(CuDNNLSTM(32, return_sequences = True)))
model.add(GlobalMaxPool1D())
model.add(Dense(20, activation="relu"))
model.add(Dropout(0.05))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy',km.binary_precision()])

model.fit(sequences_matrix,y_train,batch_size=128,epochs=10,
          validation_split=0.2,verbose=2)

Когда я проверяю его на тестовых данных, используя следующий код

test_sequences = tokenize.texts_to_sequences(corpus_test)
test_sequences_matrix = sequence.pad_sequences(test_sequences,maxlen=max_len)
print(model.evaluate(test_sequences_matrix,y_test))

Результат выглядит следующим образом

[0.5238178644069406, 0.7686046519944835, 0.8109305759511182]

Но когда япроверьте это, используя sklearn.metrics результаты ухудшились:

y_pred = model.predict(test_sequences_matrix, batch_size=128, verbose=1)
y_pred_bool = np.argmax(y_pred, axis=1)
print(classification_report(y_test, y_pred_bool))

Результат по sklearn выглядит следующим образом

              precision    recall  f1-score   support

           0       0.28      1.00      0.44       240
           1       0.00      0.00      0.00       620

    accuracy                           0.28       860
   macro avg       0.14      0.50      0.22       860
weighted avg       0.08      0.28      0.12       860

Путаница matix выглядит следующим образом.

     0     1
0   143    97
1   98    522

Коддля путаницы матрицы

y_pred = model.predict_classes(test_sequences_matrix, batch_size=128, verbose=1)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
...