CodeBlanks Logo Icon CodeBlanks

Özet - Dengesiz veri

Bu grupta SMOTE, class_weight ve metrik seçimini öğrendin.

Özet: dengesiz veri

Bu grupta:

  • Dengesiz veride doğruluk yanıltır; azınlık duyarlılığı ve kesinliğine bakılır.
  • SMOTE yapay ara örnek üretir; rastgele over/undersampling basit alternatiflerdir; örnekleme yalnızca eğitim verisine.
  • class_weight veriyi değiştirmeden azınlık hatasını pahalılaştırır.
  • Metrikler: F1, ortalama kesinlik (rastgele = azınlık oranı), ROC AUC (iyimser olabilir).
  • Eşik ayarı çoğu zaman en ucuz ve etkili iyileştirmedir.

Uygulama En iyi F1 eşiği

Eğitim kümesini test_size=0.3, random_state=1, stratify=y_train ile eğitim ve doğrulamaya böl. Lojistik regresyonu eğitimde eğit; doğrulamada F1'i en yüksek yapan eşiği precision_recall_curve ile bul. Test kümesinde 0.5 eşiğindeki ve bulunan eşikteki F1'i round(..., 3) ile aynı satırda yazdır.

Başlangıç kodu

model.py
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 f1_score, precision_recall_curve

# buraya yaz

Örnek çözüm

model.py
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 f1_score, precision_recall_curve

X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size=0.3, random_state=1, stratify=y_train)
m = LogisticRegression().fit(X_tr, y_tr)
pr, re, esik = precision_recall_curve(y_val, m.predict_proba(X_val)[:, 1])
f1 = 2 * pr * re / (pr + re + 1e-12)
en_iyi = esik[f1[:-1].argmax()]
p = m.predict_proba(X_test)[:, 1]
print(round(f1_score(y_test, p >= 0.5), 3), round(f1_score(y_test, p >= en_iyi), 3))

Beklenen çıktı

0.061 0.162

Soru ve cevaplar

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

1 Dengesiz veride CV nasıl yapılmalıdır?

  • StratifiedKFold ile, örnekleme her katmanın eğitim kısmında Doğru cevap
  • Önce tüm veriyi SMOTE'la, sonra böl
  • Düz KFold ile
  • CV gerekmez

Açıklama: Önce örnekleyip bölmek yapay örnekleri doğrulama katmanına sızdırır.

2 Seçimi F1'e göre yap.

Soru
gs = GridSearchCV(pipe, izgara, cv=5, scoring=____)
Cevap
gs = GridSearchCV(pipe, izgara, cv=5, scoring="f1")

Açıklama: Dengesiz problemde scoring azınlığı dikkate almalıdır.

3 Çözümleri eşleştir.

Kavram Anlamı
Veri tarafı SMOTE, undersampling
Model tarafı class_weight
Karar tarafı Eşik ayarı
Ölçüm tarafı F1, ortalama kesinlik

Orta seviye bölümündeki tüm dersler