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

sklearn生成混淆矩阵的坐标轴标注正确性确认问题

混淆矩阵坐标轴标注修正说明

现使用的混淆矩阵生成代码

from sklearn.naive_bayes import MultinomialNB
mnb=MultinomialNB()
mnb.fit(X_train,Y_train)
# 测试用短信样例
sms2="O2提醒:要领取2.5英镑免费通话额度及重磅优惠详情,请回复本短信并提供你的有效姓名、门牌号及邮编"
sms="恭喜你中奖了!"
X_test = [str (item) for item in X_test]

Y_pred = mnb.predict(vec.transform(X_test))
from sklearn.metrics import confusion_matrix
mat = confusion_matrix(Y_test, Y_pred)
print(mat)
names =[ "非垃圾短信", "垃圾短信"]
print(names)
sns.heatmap(mat, square=True, annot=True, fmt='d', cbar=False,
            xticklabels=names, yticklabels=names)
plt.xlabel('实际值(真实)')
plt.ylabel('预测值')
plt.show()

生成的混淆矩阵结果

混淆矩阵结果

标注正误判断

你当前的坐标轴标注是错误的,二者需要互换位置。

判断依据

  1. sklearn.metrics.confusion_matrix的输出规则:
    调用confusion_matrix(y_true, y_pred)时,返回的二维矩阵遵循如下结构:
  • 矩阵的**行(第一维度)**对应真实标签分类:第i行的所有数值,都代表真实类别为第i类的样本统计结果
  • 矩阵的**列(第二维度)**对应预测标签分类:第j列的所有数值,都代表被模型预测为第j类的样本统计结果
  1. seaborn.heatmap的渲染规则:
    传入矩阵后,矩阵的行会对应热力图的y轴刻度,矩阵的列会对应热力图的x轴刻度。

结合上述两点可知,你当前给x轴标注「实际值(真实)」、y轴标注「预测值」的做法刚好和矩阵定义相反。

修正方案

将坐标轴标注部分的代码修改为如下内容即可:

plt.xlabel('预测值')
plt.ylabel('实际值(真实)')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:21:03