Scikit学习混淆矩阵

Posted

技术标签:

【中文标题】Scikit学习混淆矩阵【英文标题】:Scikit learn confusion matrix 【发布时间】:2013-08-25 20:44:51 【问题描述】:

我正在使用 sci-kit learn 制作一个混淆矩阵,其中包含两个不同的列表:gold_labels 和预测标签

cm = confusion_matrix(gold_labels, predicted_labels)
pl.matshow(cm) #I use pl to generate an image
pl.title('Confusion Matrix')
pl.ylabel('True label')
pl.xlabel('Predicted label')
pl.colorbar()

黄金标签/预测标签看起来像这样:(字符串列表)

gold_labels =["hello", "apple".....] 
predicted_labels=["hi", "apple"....]

生成了混淆矩阵,它看起来很漂亮,但标签是索引 (0,1,2),我无法判断 0 是映射到“hello”还是“apple” 所以,我有两个问题: 1)有没有办法让标签出现在pl中生成的混淆矩阵上 2)如果不是,我怎么知道我的字符串列表中的内容与其对应的索引匹配

【问题讨论】:

我不太明白你的问题。你能把标签放在混淆矩阵上吗?如果是这样,这是我不久前回答的有关如何执行此操作的示例...***.com/questions/2897826/… 不,我的意思不是数字显示为标签 (0,1,2,3) 我想要字符串(你好,苹果出现) 【参考方案1】:

只需调用plt.xticks 和plt.yticks 函数即可。

首先您必须选择您希望刻度在轴上的位置,然后您必须设置标签。

例如:假设您有一个从 525x 轴,并且您想要在 81522 处有 3 个刻度,并且您想要标签 foobar, baz.

那么你应该调用:

# do your plotting first, for example
x = np.arange(5, 25)
y = x * x
plt.plot(x, y)
# and then the ticks
plt.xticks([8, 15, 22], ['foo', 'bar', 'baz'])
# And finally show the plot
plt.show()

在您的情况下,因为您的标签刻度在 [0, 1, 2] 并且您希望 helloappleorange 作为您的标签。你应该这样做:

plt.xticks([0, 1, 2], ['hello', 'apple', 'orange'])

【讨论】:

以上是关于Scikit学习混淆矩阵的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵(Confusion matrix)的原理及使用(scikit-learn 和 tensorflow)

混淆矩阵中的 Scikit-learn 变化阈值

scikit-learn 多分类混淆矩阵

scikit-learn 中聚类的混淆矩阵

Scikit-learn ValueError:使用混淆矩阵时不支持未知

使用没有分类器的 scikit-learn 绘制混淆矩阵