如果测试时只有一个子集类别,而训练时有100个类别,生成的混淆矩阵将会是一个50×50的矩阵。解决这个问题的方法是,在生成混淆矩阵之前,将测试集的标签和预测结果扩展为100个类别。

一种简单的方法是,创建一个大小为100的零矩阵,然后将测试集中的类别按照其对应的索引填入矩阵中。同样地,将预测结果也按照其对应的索引填入矩阵中。这样就可以生成一个100×100的混淆矩阵,并且只有子集类别的部分会有非零值。

以下是修改后的代码示例:

# 扩展为100个类别的混淆矩阵
cm = np.zeros((100, 100))
for i, label in enumerate(labels):
    cm[label, preds[i]] += 1

# 获取子集类别的标签和类别名
subset_labels = np.unique(labels)
subset_classes = [dataset_val.name_class[label] for label in subset_labels]

# 生成子集类别的混淆矩阵
cm_subset = cm[np.ix_(subset_labels, subset_labels)]
cm_df = pd.DataFrame(cm_subset, index=subset_classes, columns=subset_classes)

这样就能够生成一个适应测试集子集类别的混淆矩阵

cm = confusion_matrixlabels preds classes = dataset_valname_class cm_df = pdDataFramecm index=classes columns=classes 如果训练时候类别有100个但是测试时候类别是一个子集只有50个类别似乎这样生成的混淆矩阵也许不是100×100如何解决

原文地址: https://www.cveoy.top/t/topic/ihfi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录