CodeBlanks Logo Icon CodeBlanks

Karmaşıklık matrisi

Karmaşıklık matrisi, sınıflandırma sonuçlarını detaylı gösterir.

Karmaşıklık matrisi

Karmaşıklık matrisi, hangi sınıfın hangisiyle karıştırıldığını gösterir. İkili problemde dört hücre vardır:

from sklearn.metrics import confusion_matrix
y_true = [1, 0, 1, 1, 0, 0]
y_pred = [1, 0, 0, 1, 1, 0]
print(confusion_matrix(y_true, y_pred))
# [[2 1]    satır: gerçek 0 -> TN=2, FP=1
#  [1 2]]   satır: gerçek 1 -> FN=1, TP=2

Satırlar gerçek sınıflar, sütunlar tahminlerdir. Köşegen doğru tahminleri, köşegen dışı hataları sayar.

Hücreleri okumak

ravel() ile dört değer sırayla açılabilir. Hangi hatanın daha pahalı olduğu probleme göre değişir:

tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
# spam filtresi: FP (önemli e-posta spam'e düştü) pahalı
# kanser taraması: FN (hasta kaçırıldı) pahalı

Çok sınıflı problemde matris k×k olur; büyük köşegen dışı değerler modelin hangi sınıfları ayıramadığını gösterir.

Uygulama Matrisi çıkar

Ölçeklenmiş bir lojistik regresyon hattıyla meme kanseri verisinde test tahminlerini al. Karmaşıklık matrisini yazdır, ardından ravel() ile açıp FN ve FP sayılarını aralarında boşlukla yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
from sklearn.metrics import confusion_matrix

m = make_pipeline(StandardScaler(), LogisticRegression()).fit(X_train, y_train)

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0, stratify=y)
from sklearn.metrics import confusion_matrix

m = make_pipeline(StandardScaler(), LogisticRegression()).fit(X_train, y_train)

cm = confusion_matrix(y_test, m.predict(X_test))
print(cm)
tn, fp, fn, tp = cm.ravel()
print(fn, fp)

Beklenen çıktı

[[50  3]
 [ 3 87]]
3 3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Hasta olan birine "sağlıklı" demek hangi hücreye düşer?

  • Doğru pozitif (TP)
  • Yanlış negatif (FN) Doğru cevap
  • Yanlış pozitif (FP)
  • Doğru negatif (TN)

Açıklama: Gerçek pozitif (hasta), tahmin negatif (sağlıklı): yanlış negatif.

2 Matrisi dört değere aç.

Soru
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).____()
Cevap
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()

Açıklama: ravel matrisi satır sırasıyla düzleştirir: TN, FP, FN, TP.

3 Hücreleri eşleştir.

Kavram Anlamı
TP Pozitif, doğru bilindi
TN Negatif, doğru bilindi
FP Yanlış alarm
FN Kaçırılan pozitif

Başlangıç bölümündeki tüm dersler