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

不使用sklearn为MNIST数据集构建混淆矩阵的技术实现问询

手动构建MNIST混淆矩阵(不依赖sklearn)

核心思路

混淆矩阵是一个10×10的矩阵,行代表真实标签,列代表预测标签,每个位置的数值对应「真实为某类、预测为某类」的样本数量。我们只需要初始化一个全零矩阵,在遍历测试集时实时更新对应位置的计数即可。

修改后的完整代码

import numpy

# 初始化10x10的混淆矩阵,元素类型为整数(对应0-9十个数字类别)
confusion_matrix = numpy.zeros((10, 10), dtype=int)
scorecard = []

# 遍历测试数据集的所有记录
for record in test_data_list:
    # 按逗号分割记录
    all_values = record.split(',')
    # 提取真实标签(第一个值)
    correct_label = int(all_values[0])
    # 缩放并偏移输入数据,适配神经网络输入范围
    inputs = (numpy.asfarray(all_values[1:]) / 255.0 * 0.99) + 0.01
    # 用训练好的网络获取预测输出
    outputs = n.query(inputs)
    
    # 获取预测标签(输出节点中概率最大值的索引)
    label = numpy.argmax(outputs)
    
    # 更新混淆矩阵:真实标签对应行,预测标签对应列,计数+1
    confusion_matrix[correct_label][label] += 1
    
    # 记录单条样本的分类结果(正确/错误)
    scorecard.append(1 if label == correct_label else 0)

# 打印混淆矩阵
print("混淆矩阵:")
print(confusion_matrix)

# 计算并输出准确率(两种方式均可,结果一致)
# 方式1:用scorecard计算
scorecard_array = numpy.asarray(scorecard)
print(f"准确率: {scorecard_array.sum() / scorecard_array.size:.4f}")

# 方式2:用混淆矩阵对角线元素求和计算
correct_total = numpy.trace(confusion_matrix)
total_samples = confusion_matrix.sum()
print(f"准确率(混淆矩阵计算): {correct_total / total_samples:.4f}")

矩阵解读

  • 对角线元素confusion_matrix[i][i]:真实标签为i且预测正确的样本数量,所有对角线元素之和是总正确分类数。
  • 非对角线元素confusion_matrix[i][j](i≠j):真实标签为i但被错误预测为j的样本数量,数值越高说明模型越容易混淆这两个类别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:30:49