我使用scikit-learn中的confusion_matrix()
函数计算了我的分类器的混淆矩阵。混淆矩阵的对角线元素表示预测标签等于真实标签的点的数量,而非对角线元素则是被分类器错误标记的点。
我想标准化我的混淆矩阵,使其仅包含0到1之间的数字。我希望从矩阵中读取正确分类的样本百分比。
我找到了几种标准化矩阵的方法(行和列标准化),但我不太懂数学,不确定这是否是正确的方法。
回答:
我假设M[i,j]
表示“真实类别为i的元素被分类为j”。如果情况相反,你需要转置我说的所有内容。我还将使用以下矩阵作为具体示例:
1 2 34 5 67 8 9
你可以做的事情基本上分为两类:
了解每个类别是如何被分类的
你可以问的是,真实类别i
的元素中有多少百分比被分类为各个类别。为此,我们固定i
取一行,并将每一元素除以该行的元素总和。在我们的例子中,类别2的对象被分类为类别1的次数为4次,正确分类为类别2的次数为5次,被分类为类别3的次数为6次。要找到百分比,我们只需将所有数除以总和4 + 5 + 6 = 15
4/15的类别2对象被分类为类别15/15的类别2对象被分类为类别26/15的类别2对象被分类为类别3
了解每个分类结果由哪些类别负责
你可以做的第二件事是查看分类器的每个结果,并询问这些结果中有多少来自每个真实类别。这与前一种情况类似,但使用的是列而不是行。在我们的例子中,当原始类别为1时,分类器返回“1”的次数为1次,当原始类别为2时为4次,当原始类别为3时为7次。要找到百分比,我们除以总和1 + 4 + 7 = 12
1/12被分类为类别1的对象来自类别14/12被分类为类别1的对象来自类别27/12被分类为类别1的对象来自类别3
—
当然,我提供的两种方法一次只适用于单行或单列,我不确定是否应该以这种形式实际修改你的混淆矩阵。然而,这应该能给你提供你所寻找的百分比。