Plot Confusion Matrix with scikit-learn without a Classifier
Solution 1
The fact that you can import plot_confusion_matrix
directly suggests that you have the latest version of scikit-learn (0.22) installed. So you can just look at the source code of plot_confusion_matrix()
to see how its using the estimator
.
From the latest sources here, the estimator is used for:
- computing confusion matrix using
confusion_matrix
- getting the labels (unique values of y which correspond to 0,1,2.. in the confusion matrix)
So if you have those two things already, you just need the below part:
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()
Do look at the NOTE in comment.
For older versions, you can look at how the matplotlib part is coded here
Solution 2
The below code is to create confusion matrix from true values and predicted values. If you have already created the confusion matrix you can just run the last line below.
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')
Irina
Updated on July 27, 2022Comments
-
Irina almost 2 years
I have a confusion matrix created with
sklearn.metrics.confusion_matrix
.Now, I would like to plot it with
sklearn.metrics.plot_confusion_matrix
, but the first parameter is the trained classifier, as specified in the documentation. The problem is that I don't have a classifier; the results were obtained doing manual calculations.Is it still possible to plot the confusion matrix in one line via scikit-learn, or do I have to code it myself with matplotlib?
-
Irina over 4 yearsConfusionMatrixDisplay is exactly what I was looking for. Thank you!
-
Thomas Leyshon over 3 yearsHow would one get a log scaling of the confusion matrix? The context is:
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()
. The scale of the true negatives here dwarfs everything so the colour scaling is sort of pointless here, unless there is a way to scale the colours logarithmically? Thanks in advance! -
Bilal Chandio about 3 yearsThe problem with this approach is we can't normalize the confusion matrix.
-
Shamsul Arefin about 3 yearsI cannot normalize the matrix with this approach
-
Vivek Kumar about 3 years@ShamsulArefinSajib , can you please explain in more detail.
ConfusionMatrixDisplay
just takes thecm
matrix to plot it. Are you saying that you cannot pass a normalizedcm
matrix in it? -
Shamsul Arefin about 3 yearsI mean the process using
plot_confusion_matrix
has an argument to plot the normalized version of the matrix. This process does not have anything like that. I have to normalize the matrix myself before passing into it. -
Vivek Kumar about 3 years@ShamsulArefinSajib Yes, because we are using the source code of the function to make it work without the estimator. So any changes you want to the confusion matrix must be done manually.
-
Hoppeduppeanut almost 3 yearsPlease avoid leaving link-only answers to other Stack Overflow posts when posting an answer. Instead, please edit your answer to include the most important details from the linked post that's relevant and tailored to the question being asked.
-
g4s9 almost 3 years@Hoppeduppeanut sure., I included the relevant code block here too. thanks
-
Tyler2P over 2 yearsPlease try to give proper explanation of the answer.