为什么我在使用 keras 模型的混淆矩阵中得到 TN 和 FN 中的 0?

问题描述 投票:0回答:0

我尝试使用 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模型有什么问题?

python tensorflow keras sklearn-pandas confusion-matrix
© www.soinside.com 2019 - 2024. All rights reserved.