confusion_matrix
czym jest macierz pomyłek? ⭐
- Macierz pomyłek (Confusion Matrix) to tabela używana do oceny wydajności modelu klasyfikacyjnego.
- Pokazuje rzeczywiste vs przewidywane klasy dla wszystkich próbek.
- Pozwala na szczegółową analizę błędów modelu.
- Jest podstawą do obliczania wielu metryk klasyfikacji.
struktura macierzy pomyłek ⭐
Dla klasyfikacji binarnej (2 klasy):
Przewidywane
Rzeczywiste Pozytywne Negatywne
Pozytywne TP FN
Negatywne FP TN
Gdzie:
- TP (True Positive): Poprawnie przewidziane pozytywne
- TN (True Negative): Poprawnie przewidziane negatywne
- FP (False Positive): Błędnie przewidziane pozytywne (Type I Error)
- FN (False Negative): Błędnie przewidziane negatywne (Type II Error)
przykładowy kod (scikit-learn)
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Generowanie danych
X, y = make_classification(n_samples=1000, n_features=10, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Trenowanie modelu
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# Macierz pomyłek
cm = confusion_matrix(y_test, y_pred)
print("Macierz pomyłek:")
print(cm)
# Wizualizacja macierzy pomyłek
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
xticklabels=['Negatywne', 'Pozytywne'],
yticklabels=['Negatywne', 'Pozytywne'])
plt.title('Macierz Pomyłek')
plt.ylabel('Rzeczywiste')
plt.xlabel('Przewidywane')
plt.show()
# Obliczanie metryk z macierzy pomyłek
TP = cm[1, 1]
TN = cm[0, 0]
FP = cm[0, 1]
FN = cm[1, 0]
accuracy = (TP + TN) / (TP + TN + FP + FN)
precision = TP / (TP + FP)
recall = TP / (TP + FN)
f1_score = 2 * (precision * recall) / (precision + recall)
print(f"\nMetryki obliczone z macierzy pomyłek:")
print(f"Accuracy: {accuracy:.3f}")
print(f"Precision: {precision:.3f}")
print(f"Recall: {recall:.3f}")
print(f"F1-Score: {f1_score:.3f}")
praktyczne ćwiczenia
- Stwórz macierz pomyłek dla różnych modeli klasyfikacyjnych.
- Analizuj wzorce błędów w macierzy pomyłek.
- Porównaj macierze pomyłek dla zbalansowanych i niezbalansowanych zbiorów danych.
- Zaimplementuj własną funkcję do obliczania metryk z macierzy pomyłek.
- Wizualizuj macierze pomyłek dla wieloklasowej klasyfikacji.
interpretacja macierzy pomyłek
Dla problemów medycznych
- FP (False Positive): Fałszywy alarm - pacjent zdrowy uznany za chorego
- FN (False Negative): Przeoczenie - pacjent chory uznany za zdrowego
Dla problemów biznesowych
- FP (False Positive): Fałszywy alarm - klient uznany za chętnego do zakupu
- FN (False Negative): Przeoczenie - klient chętny do zakupu uznany za niechętnego
macierz pomyłek dla wieloklasowej klasyfikacji
# Przykład dla 3 klas
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# Ładowanie danych iris
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Trenowanie modelu
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
# Macierz pomyłek dla wieloklasowej klasyfikacji
cm_multi = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(10, 8))
sns.heatmap(cm_multi, annot=True, fmt='d', cmap='Blues',
xticklabels=iris.target_names,
yticklabels=iris.target_names)
plt.title('Macierz Pomyłek - Iris Dataset')
plt.ylabel('Rzeczywiste')
plt.xlabel('Przewidywane')
plt.show()
dobre praktyki
- Normalizacja: Rozważ normalizację macierzy pomyłek dla lepszej interpretacji.
- Wizualizacja: Zawsze wizualizuj macierz pomyłek.
- Kontekst: Interpretuj wyniki w kontekście problemu biznesowego.
- Porównanie: Porównuj macierze pomyłek między różnymi modelami.
polecane źródła
- Confusion Matrix – scikit-learn
- Understanding Confusion Matrix – Towards Data Science
- Confusion Matrix – StatQuest (YouTube)
- Confusion Matrix Tutorial – Machine Learning Mastery