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

请教这段Python混淆矩阵归一化代码的具体工作原理

混淆矩阵归一化代码解析

先看你提到的代码:

cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]

这段代码的核心是按行归一化混淆矩阵,让每行的数值总和为1,这样就能直接看出每个真实类别被预测为各类别的比例,下面拆解每部分的作用:

  • cm.astype('float'):把混淆矩阵的元素类型转换成浮点型。原始混淆矩阵通常是整数(统计的样本数量),转成浮点型后才能得到0到1之间的小数结果,避免整数除法带来的精度丢失问题。

  • cm.sum(axis=1):计算混淆矩阵每行的总和。axis=1表示沿着行的方向求和,得到的是一个一维数组,每个元素对应原矩阵某一行的总样本数——也就是该真实类别的所有样本数量。

  • [:, np.newaxis]:把刚才得到的一维数组转换成二维列向量。原混淆矩阵是n×n的二维数组,直接用一维数组做除法会触发维度不匹配的问题,转成列向量(形状从(n,)变成(n,1))后,就能和原矩阵逐行对应,让每行的每个元素都除以该行的总和。

  • 整体除法运算:把转换后的浮点型矩阵,逐行除以对应行的总样本数。处理后每行的所有元素加起来等于1,每个元素的数值就是「真实为该类的样本中,被预测为对应列类别的比例」。

举个简单例子直观理解:
假设原始混淆矩阵是:

[[5, 2],  # 真实类别0的样本:5个被正确预测,2个被错分到类别1
 [1, 6]]  # 真实类别1的样本:1个被错分到类别0,6个被正确预测
  • cm.sum(axis=1)得到[7,7],转成列向量后是[[7],[7]]
  • 逐行除法后得到归一化的矩阵:
[[0.714, 0.286],
 [0.143, 0.857]]

第一行的0.714就是真实类别0的样本中正确分类的占比,0.286是错分占比;第二行同理,0.857是真实类别1的正确分类占比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:01:23