使用没有分类器的 scikit-learn 绘制混淆矩阵
Posted
技术标签:
【中文标题】使用没有分类器的 scikit-learn 绘制混淆矩阵【英文标题】:Plot Confusion Matrix with scikit-learn without a Classifier 【发布时间】:2020-03-28 14:44:28 【问题描述】:我有一个使用sklearn.metrics.confusion_matrix
创建的混淆矩阵。
现在,我想用sklearn.metrics.plot_confusion_matrix
绘制它,但第一个参数是经过训练的分类器,在documentation 中指定。问题是我没有分类器;结果是人工计算得出的。
是否仍然可以通过 scikit-learn 将混淆矩阵绘制在一行中,还是我必须使用 matplotlib 自己编写代码?
【问题讨论】:
【参考方案1】:您可以直接导入plot_confusion_matrix
表明您安装了最新版本的scikit-learn (0.22)。所以你可以看看plot_confusion_matrix()
的源代码,看看它是如何使用estimator
的。
从latest sources here,估计器用于:
-
使用
confusion_matrix
计算混淆矩阵
获取标签(y 的唯一值,对应于混淆矩阵中的 0,1,2..)
所以如果你已经有了这两个东西,你只需要下面的部分:
import matplotlib.pyplot as plt
from sklearn.metrics import ConfusionMatrixDisplay
disp = ConfusionMatrixDisplay(confusion_matrix=cm,
display_labels=display_labels)
# NOTE: Fill all variables here with default values of the plot_confusion_matrix
disp = disp.plot(include_values=include_values,
cmap=cmap, ax=ax, xticks_rotation=xticks_rotation)
plt.show()
请看评论中的注释。
老版本可以看一下matplotlib部分是怎么编码的here
【讨论】:
ConfusionMatrixDisplay 正是我想要的。谢谢! 如何获得混淆矩阵的对数缩放?上下文是:import numpy as np ; from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay; disp = ConfusionMatrixDisplay(confusion_matrix=np.asarray([[13099,7004],[27420,544967]]), display_labels= np.asarray([0,1])) ; disp.plot()
。这里真底片的比例使一切都相形见绌,所以颜色缩放在这里有点毫无意义,除非有一种方法可以对数缩放颜色?提前致谢!
这种方法的问题是我们不能标准化混淆矩阵。
我无法用这种方法对矩阵进行归一化
@ShamsulArefinSajib ,您能否详细解释一下。 ConfusionMatrixDisplay
只需使用 cm
矩阵来绘制它。您是说不能在其中传递标准化的cm
矩阵吗?【参考方案2】:
以下代码是根据真实值和预测值创建混淆矩阵。如果您已经创建了混淆矩阵,则可以运行下面的最后一行。
import seaborn as sns
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_true, y_pred)
f = sns.heatmap(cm, annot=True, fmt='d')
【讨论】:
请尽量给出正确的答案解释。【参考方案3】:如果适合您的用例,您可以使用单行“身份分类器”。
IC = type('IdentityClassifier', (), "predict": lambda i : i, "_estimator_type": "classifier")
plot_confusion_matrix(IC, y_pred, y_test, normalize='true', values_format='.2%');
(请参阅我的原始答案:plot_confusion_matrix without estimator)
【讨论】:
在发布答案时,请避免将仅链接的答案留给其他 Stack Overflow 帖子。相反,请edit您的答案包括链接帖子中与所问问题相关且量身定制的最重要细节。 @Hoppeduppeanut 当然。我在这里也包含了相关的代码块。谢谢以上是关于使用没有分类器的 scikit-learn 绘制混淆矩阵的主要内容,如果未能解决你的问题,请参考以下文章
如何获得 scikit-learn SVM 分类器的所有 alpha 值?
在 scikit-learn 中获得二元概率分类器的最大准确度
在 scikit-learn 库中使用 sgd 求解器的 SGDClassifier 与 LogisticRegression