Stratified
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 16/112
- 5 dk
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 önceDoğ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
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
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.
cross_val_score(model, X, y, cv=GroupKFold(5), ____=hasta_id)
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 |