CodeBlanks Logo Icon CodeBlanks

Stratified

Stratified k-fold, sınıf dağılımını her katmanda korur.

StratifiedKFold

Sınıflandırmada katmanların sınıf oranlarını koruması gerekir; aksi halde bir katmanda azınlık sınıfı hiç bulunmayabilir. StratifiedKFold bunu garanti eder:

from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for egitim, dogrulama in skf.split(X, y):   # y gerekir
    print(np.bincount(y[dogrulama]))

split bu kez y'yi de alır, çünkü oranları ona bakarak korur.

Gruplu ve zamana bağlı bölme

Aynı hastanın birden çok ölçümü hem eğitimde hem doğrulamada olursa model hastayı "tanır" ve skor şişer. GroupKFold bir grubun tüm örneklerini aynı katmanda tutar. Zaman serilerinde TimeSeriesSplit her zaman geçmişle eğitip gelecekle doğrular:

from sklearn.model_selection import GroupKFold, TimeSeriesSplit
cross_val_score(model, X, y, cv=GroupKFold(5), groups=hasta_id)
for tr, va in TimeSeriesSplit(n_splits=3).split(X):
    print(tr.max() < va.min())   # True: eğitim hep önce

Doğru bölücü, verinin gerçek kullanım biçimini taklit eden bölücüdür.

Uygulama Katman oranları

12 sıfır ve 3 birden oluşan y için KFold(n_splits=3) ve StratifiedKFold(n_splits=3) (ikisi de karıştırmasız) katmanlarındaki 1 sayısını y[dogrulama].sum() ile liste olarak hesapla. İki listeyi alt alta yazdır.

Başlangıç kodu

model.py
import numpy as np
from sklearn.model_selection import KFold, StratifiedKFold

X = np.arange(15).reshape(-1, 1)
y = np.array([0] * 12 + [1] * 3)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.model_selection import KFold, StratifiedKFold

X = np.arange(15).reshape(-1, 1)
y = np.array([0] * 12 + [1] * 3)

for bolucu in [KFold(n_splits=3), StratifiedKFold(n_splits=3)]:
    print([int(y[dogrulama].sum()) for _, dogrulama in bolucu.split(X, y)])

Beklenen çıktı

[0, 0, 3]
[1, 1, 1]

Soru ve cevaplar

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

1 Neden <code>StratifiedKFold.split</code> <code>y</code> parametresini ister?

  • İstemez
  • Sınıf oranlarını korumak için Doğru cevap
  • Modeli eğitmek için
  • Skor hesaplamak için

Açıklama: Katmanlara dağıtım her sınıf için ayrı ayrı yapılır.

2 Aynı grubun örneklerini aynı katmanda tut.

Soru
cross_val_score(model, X, y, cv=GroupKFold(5), ____=hasta_id)
Cevap
cross_val_score(model, X, y, cv=GroupKFold(5), groups=hasta_id)

Açıklama: groups her örneğin hangi gruba ait olduğunu verir.

3 Durumları bölücülerle eşleştir.

Kavram Anlamı
Dengesiz sınıflar StratifiedKFold
Aynı hastanın ölçümleri GroupKFold
Günlük satışlar TimeSeriesSplit
Bağımsız örnekler KFold

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