Я пытаюсь классифицировать текстовые данные. Я использую 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)