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

如何确保pandas.crosstab返回方形矩阵 缺失标签填充0

pandas.crosstab生成固定维度方形混淆矩阵方案

pandas.crosstab默认仅统计输入序列中实际出现的标签值,当预测结果未覆盖全部类别时,会自动丢弃未出现的标签,输出非方形矩阵/一维向量,不符合混淆矩阵的格式要求。

实现逻辑

提前指定全量标签集合,将真实、预测标签序列转换为pandas分类类型,强制crosstab统计时覆盖所有指定类别,未出现的类别位置自动填充0,无需后续手动对齐索引。

代码示例

import pandas as pd

# 测试数据
true_data = pd.Series([1, 1, 2, 2, 3, 3, 4, 4, 5, 5])
pred_data = pd.Series([3, 3, 2, 3, 2, 1, 1, 3, 4, 1])

# 定义全量类别标签,若有预设的全类别列表可直接赋值
all_labels = sorted(true_data.unique())

# 将两个标签序列转换为指定类别范围的分类类型
true_with_all_cat = pd.Categorical(true_data, categories=all_labels)
pred_with_all_cat = pd.Categorical(pred_data, categories=all_labels)

# 生成混淆矩阵
confusion_matrix = pd.crosstab(true_with_all_cat, pred_with_all_cat, dropna=False)

执行后输出结果与预期完全一致,为行列均覆盖全部标签的5*5方阵:

col_0  1  2  3  4  5
row_0               
1      0  0  2  0  0
2      0  1  1  0  0
3      1  1  0  0  0
4      1  0  1  0  0
5      1  0  0  1  0

注意事项

  • 若分类任务有固定的全类别集合(例如多分类任务预设的所有标签),可直接将all_labels替换为固定标签列表,无需从真实标签中提取,可覆盖真实/预测序列均未出现某类标签的极端场景
  • 该方法兼容分类器异常的极端情况:哪怕所有样本都被预测为单一标签,也能输出维度正确的方形混淆矩阵
  • 必须保留dropna=False参数,避免空值标签被自动丢弃导致维度错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:09:20