Özet - Dengesiz veri
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 92/112
- 6 dk
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_weightveriyi 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
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
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.
gs = GridSearchCV(pipe, izgara, cv=5, scoring=____)
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 |