Makine Öğrenmesi
Metrik seçimi
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.
Örnek çözümü göster
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))
Kendini test et
-
%1 azınlıklı bir veride rastgele modelin ortalama kesinliği yaklaşık kaçtır?
Cevabı göster
0.01 — Rastgele tahminde her eşikte kesinlik azınlık oranı civarındadır.
-
Eşikten bağımsız PR özetini hesapla.
ap = ____(y_test, p)
Cevabı göster
ap = average_precision_score(y_test, p)
-
Metrikleri eşleştir.
- 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
Sıradaki ders: Özet - Dengesiz veri