Metrik seçimi
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 91/112
- 5 dk
Dengesiz veride accuracy yerine F1 veya AUC kullanılır.
Metrik seçimi
Dengesiz veride doğruluk yerine azınlığa odaklanan metrikler kullanılır:
- Kesinlik/duyarlılık/F1: azınlık sınıfı için.
- Ortalama kesinlik (PR AUC): kesinlik-duyarlılık eğrisinin altındaki alan; eşikten bağımsızdır.
- ROC AUC: dengesizlikte iyimser görünebilir, çünkü çok sayıdaki doğru negatif FPR'yi küçük tutar.
from sklearn.metrics import average_precision_score, roc_auc_score
p = m.predict_proba(X_test)[:, 1]
print(roc_auc_score(y_test, p), average_precision_score(y_test, p))Rastgele bir modelin PR AUC'si azınlık oranına (burada 0.05) eşittir; ROC AUC'si ise 0.5'tir.
Eşik ayarı
Model değiştirmeden en etkili adım çoğu zaman karar eşiğini ayarlamaktır. Eşik doğrulama verisinde, istenen duyarlılığı ya da en yüksek F1'i verecek biçimde seçilir:
from sklearn.metrics import precision_recall_curve
pr, re, esik = precision_recall_curve(y_val, p_val)
f1 = 2 * pr * re / (pr + re + 1e-12)
en_iyi = esik[f1[:-1].argmax()]scikit-learn'ün yeni sürümlerindeki TunedThresholdClassifierCV bunu CV ile otomatik yapar.
Uygulama AUC ve AP
Lojistik regresyonun test olasılıkları için ROC AUC ve ortalama kesinliği round(..., 3) ile aynı satırda yazdır. Ardından rastgele olasılıklarla (rng.random(len(y_test))) aynı iki metriği yazdır.
Başlangıç kodu
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(n_samples=2000, n_features=10, n_informative=4, weights=[0.95, 0.05], flip_y=0, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, average_precision_score
rng = np.random.default_rng(0)
# buraya yazÖrnek çözüm
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
X, y = make_classification(n_samples=2000, n_features=10, n_informative=4, weights=[0.95, 0.05], flip_y=0, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, stratify=y)
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, average_precision_score
rng = np.random.default_rng(0)
p = LogisticRegression().fit(X_train, y_train).predict_proba(X_test)[:, 1]
print(round(roc_auc_score(y_test, p), 3), round(average_precision_score(y_test, p), 3))
r = rng.random(len(y_test))
print(round(roc_auc_score(y_test, r), 3), round(average_precision_score(y_test, r), 3))Beklenen çıktı
0.928 0.425 0.455 0.046
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 %1 azınlıklı bir veride rastgele modelin ortalama kesinliği yaklaşık kaçtır?
- 0
- 0.01 Doğru cevap
- 0.5
- 0.99
Açıklama: Rastgele tahminde her eşikte kesinlik azınlık oranı civarındadır.
2 Eşikten bağımsız PR özetini hesapla.
ap = ____(y_test, p)
ap = average_precision_score(y_test, p)
Açıklama: average_precision_score PR eğrisinin altındaki alanı özetler.
3 Metrikleri eşleştir.
| Kavram | Anlamı |
|---|---|
average_precision |
PR eğrisi alanı |
roc_auc |
Dengesizlikte iyimser |
F1 |
Eşiğe bağlı denge |
eşik ayarı |
Model değiştirmeden iyileştirme |