【问题标题】:Confusion matrix for multilabel classification多标签分类的混淆矩阵
【发布时间】:2021-11-11 15:23:20
【问题描述】:

我已经训练了两个多标签图像分类器。第一个标记图像类别m1, m2,而第二个标记它们根据类别t1, t2, t3 例如。重要的是模型不使用相同数量的标签。

使用python,我现在想研究预测之间的相关性,第一个问题是:在第一个模型j=1,2标记为mj的所有图像中,有多少也被标记为tk第二个模型k=1,2,3?

也就是说,假设我的预测是

img1 = ['m1', 'm2', 't1']
img1 = ['m1', 't1']
img1 = ['m1', 'm2', 't1', 't3']

然后我想在混淆矩阵中获得每个类别计数的相关性——如果我使用的术语不正确,我深表歉意:

   t1 t2 t3
m1 3  0  1
m2 2  0  1

我尝试使用 pandas.crosstab() 或 scikit-learn 混淆矩阵来构建它,但我找不到解决方案。

此外,在实际情况下,我必须处理 1200 张图像,第一个模型有 28 个标签,第二个模型有 120 个标签。

感谢您的帮助!

【问题讨论】:

    标签: python pandas crosstab confusion-matrix


    【解决方案1】:

    由于我的问题没有得到答复或评论,因此它可能不那么相关。无论如何,我已经设法找到了解决方案,我会在这里分享以防万一。

    这个例子比我在答案中给出的要好一点。

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    M = []
    M.append([1,2,3])
    M.append([2,3])
    M.append([1,3])
    M.append([1,3])
    
    T = []
    T.append([1,2,3])
    T.append([2,4])
    T.append([1,3,4])
    T.append([1])
    
    labels1 = [1,2,3]
    labels2 = [1,2,3,4]
    
    counts = []
    for m in labels1:
        ids = [id_ for id_ in range(4) if m in M[id_]]
        array = np.concatenate([T[id_] for id_ in ids])
        counts.append([np.bincount(array)[t] for t in labels2])
    
    df = pd.DataFrame(counts)
    df.columns = labels2
    df.index = labels1
    
    
    ax = sns.heatmap(df)
    plt.show()
    
    counts
    >> output: [[3, 1, 2, 1], [1, 2, 1, 1], [3, 2, 2, 2]]
    

    【讨论】:

      猜你喜欢
      • 2020-01-22
      • 2014-10-19
      • 2020-10-24
      • 2019-03-01
      • 2018-11-06
      • 2018-07-30
      • 2019-05-22
      • 2020-07-31
      • 2019-01-20
      相关资源
      最近更新 更多