如何构建按站点拆分的非对称4×2 numpy混淆矩阵
4×2站点维度非对称混淆矩阵实现
实现逻辑
矩阵固定维度规则:
- 4行按顺序对应站点A、B、C、D
- 2列按顺序对应预测类别Low、High
- 矩阵元素值为对应站点下被预测为对应类别的样本总数
直接基于pandas原生交叉统计生成,最终输出numpy格式,无需额外逐组循环计数。
完整代码
import pandas as pd import numpy as np # -------------------------- # 以下为测试数据构造块,实际使用时替换为你自己的DataFrame即可 # -------------------------- n = 100 # 单站点样本量 df = pd.DataFrame({ 'Site': ['A']*n + ['B']*n + ['C']*n + ['D']*n, 'Label': ['High']*2*n + ['Low']*2*n, 'Prediction': np.random.choice(['Low', 'High'], size=4*n, p=[0.2, 0.8]) }) # -------------------------- # 核心统计逻辑 # -------------------------- # 固定维度顺序,避免类别自动排序导致结果错位 site_rank = ['A', 'B', 'C', 'D'] pred_rank = ['Low', 'High'] # 交叉计数,缺失类别补0 stat_result = pd.crosstab( index=df['Site'], columns=df['Prediction'], dropna=False ).reindex(index=site_rank, columns=pred_rank, fill_value=0) # 输出4×2规格numpy矩阵 asym_confusion_matrix = stat_result.to_numpy()
结果解读
输出的asym_confusion_matrix为shape=(4,2)的numpy数组:
- 第0~3行依次对应站点A、B、C、D
- 第0列为站点样本被预测为Low的数量,第1列为站点样本被预测为High的数量
- 站点A、B行的第0列值,就是真实标签为High的站点被错判为Low的误判数;站点C、D行的第1列值,就是真实标签为Low的站点被错判为High的误判数,可直接定位各站点分类偏差。
如果你确实需要行对应预测类别、列对应站点的2×4格式,直接对矩阵做转置即可:
asym_confusion_matrix_2x4 = asym_confusion_matrix.T
内容的提问来源于stack exchange,提问作者TheyTakingTheHobbitsToIsengard
相关产品推荐
相关产品推荐

