我尝试使用 keras 进行 NN 文本分类。但是当我做混淆矩阵时,它在 TN 和 FN 中得到 0。奇怪的是,当我使用具有相同数据和超参数的 sklearn MLPClassifier 制作模型时,我在 TN 和 FN 中没有得到 0。 这是我在 keras 中构建的模型:
model3 = Sequential()
model3.add(Dense(300, input_dim= Train_X2_Tfidf.shape[1], activation='sigmoid'))
model3.add(Dense(1, activation='sigmoid'))
opt = Adam (learning_rate=0.01)
model3.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])
model3.summary()
es = EarlyStopping(monitor="val_loss",mode='min',patience=10)
history3 = model3.fit(Train_X2_Tfidf, Train_Y2, epochs=400, verbose=1,
validation_split=0.2, batch_size=32, callbacks =[es])
Keras 模型得到这样的混淆矩阵:
y_pred = np.argmax(model3.predict(Test_X2_Tfidf), axis=-1)
print(confusion_matrix(Test_Y2, y_pred))
print(classification_report(Test_Y2, y_pred))
print('Confusion matrix:')
confusion_matrix(Test_Y2, y_pred)
from nltk.metrics.scores import precision
import seaborn as sns
import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize=(8,5))
sns.heatmap(confusion_matrix(Test_Y2, y_pred), annot=True, fmt=".0f", ax=ax)
plt.xlabel("y_head")
plt.ylabel("y_true")
plt.show()
cm = confusion_matrix(Test_Y2, y_pred)
[[186 0]
[557 0]]
使用相同的数据和超参数,我使用 sklearn MLPClassifier 模型得到的混淆矩阵是这样的:
[[146 40]
[ 35 522]]
我的keras模型有什么问题?