You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Keras模型时混淆矩阵中TN和FN均为0的原因排查

问题:Keras文本分类模型混淆矩阵TN和FN均为0的原因

尝试使用Keras进行神经网络文本分类时,生成的混淆矩阵中True Negative(TN)和False Negative(FN)均为0,但使用相同数据和超参数的sklearn MLPClassifier模型无此问题。

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模型最后一层是Dense(1, activation='sigmoid'),这是二分类任务的标准输出形式,输出值是0到1之间的概率,代表样本属于类别1的概率。但你用了np.argmax()来获取预测标签:

  • 由于模型输出是单维度数组(形状为(样本数, 1)),np.argmax()会始终返回0(唯一元素的索引就是0),导致所有预测结果都被判定为类别0,因此混淆矩阵中第二列(预测为类别1的样本数)全为0,出现TN和FN均为0的异常结果。

正确的预测标签转换方式

应该设定一个概率阈值(通常取0.5),将概率值转换为类别标签:

y_pred_proba = model3.predict(Test_X2_Tfidf)
y_pred = (y_pred_proba > 0.5).astype(int)

额外优化建议

  • 调整学习率:Adam优化器的默认学习率是0.001,你设置的0.01偏高,可能导致模型训练不稳定,难以收敛到最优状态,建议降低学习率尝试。
  • 更新输入层写法:使用Input层替代input_dim参数,更符合Keras的现代API规范:
    model3 = Sequential()
    model3.add(Input(shape=(Train_X2_Tfidf.shape[1],)))
    model3.add(Dense(300, activation='sigmoid'))
    model3.add(Dense(1, activation='sigmoid'))
    

内容的提问来源于stack exchange,提问作者andryan86

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:00:31