Visualizing Classification Performance with Confusion Matrix Heatmaps
Confusion matrices serve as a fundamental tool for evaluating classification models in machine learning. They provide a comprehensive view of how well a model performs by mapping predicted labels against actual labels. When rendered as heatmaps, these matrices become even more powerful—enabling quick visual identification of classification patterns, particularly in multi-class scenarios.
This guide walks through building confusion matrix heatmaps using Python's seaborn and scikit-learn libraries.
Environment Setup
Ensure the following packages are available in your Python environment:
pip install numpy matplotlib seaborn scikit-learn
Building and Evaluating a Classification Model
The following example demonstrates the complete workflow using the classic Iris dataset, which contains measurements for three iris species with 150 total samples.
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
# Load dataset
iris_data = load_iris()
features = iris_data.data
labels = iris_data.target
# Split into training and test sets
X_train, X_test, y_train, y_test = train_test_split(
features, labels, test_size=0.3, random_state=42
)
# Train classifier
classifier = RandomForestClassifier(n_estimators=100, random_state=42)
classifier.fit(X_train, y_train)
# Generate predictions
predictions = classifier.predict(X_test)
Computing the Confusion Matrix
The confusion matrix reveals the count of correct and incorect predictions for each class:
conf_matrix = confusion_matrix(y_test, predictions)
print(conf_matrix)
Rendering as a Heatmap
Transform the matrix into a pandas DataFrame with meaningful axis labels, then visualize using seaborn:
# Convert to labeled DataFrame
matrix_df = pd.DataFrame(
conf_matrix,
index=iris_data.target_names,
columns=iris_data.target_names
)
# Create heatmap visualization
plt.figure(figsize=(10, 7))
sns.heatmap(
matrix_df,
annot=True,
fmt="d",
cmap="Blues",
linewidths=0.5,
square=True
)
plt.title('Classification Confusion Matrix')
plt.ylabel('Actual Class')
plt.xlabel('Predicted Class')
plt.tight_layout()
plt.show()
Interpreting the Visualization
Heatmap coloring direct corresponds to frequency values:
- Diagonal cels: Indicate correct classifications. Higher values here signal strong model performance for that particular class.
- Off-diagonal cells: Reveal misclassification patterns. These cells show which classes the model confuses with each other.
Common customization options include adjusting the color palette (cmap parameter), modifying annotation format, and adding normalization for balanced class distributions.