Karmaşıklık matrisi
- Makine Öğrenmesi kursu
- Başlangıç
- Ders 63/112
- 5 dk
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=2Satı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
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
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ç.
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).____()
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 |