K-fold
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 14/112
- 5 dk
K-fold, veriyi k eşit parçaya böler ve her parçayı bir kez test eder.
KFold
KFold veriyi K ardışık parçaya böler. Veride bir sıra varsa (önce tüm 0'lar, sonra tüm 1'ler) karıştırmadan bölmek katmanları dengesiz yapar; bu yüzden shuffle=True sık kullanılır:
from sklearn.model_selection import KFold
kf = KFold(n_splits=5, shuffle=True, random_state=0)
for egitim, dogrulama in kf.split(X):
print(len(egitim), len(dogrulama))split indeks dizileri üretir; veri kopyalanmaz.
K seçimi
K büyüdükçe her eğitim kümesi tüm veriye yaklaşır (daha az iyimser olmayan tahmin) ama eğitim sayısı ve süre artar. Yaygın seçimler 5 ve 10'dur. Uç durum leave-one-out: K = örnek sayısı.
from sklearn.model_selection import LeaveOneOut
print(LeaveOneOut().get_n_splits(X)) # örnek sayısı kadar eğitimBüyük veri setlerinde 3 katman bile yeterli olabilir; küçüklerde 10 katman ya da tekrarlı CV tercih edilir.
Uygulama Elle CV döngüsü
KFold(n_splits=5, shuffle=True, random_state=0) ile katmanları gez. Her katmanda clone(model)'u eğitim indeksleriyle eğit, doğrulama doğruluğunu topla. Ortalamayı round(..., 3) ile yazdır.
Başlangıç kodu
import numpy as np
from sklearn.base import clone
from sklearn.model_selection import KFold
from sklearn.datasets import load_breast_cancer
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
X, y = load_breast_cancer(return_X_y=True)
model = make_pipeline(StandardScaler(), LogisticRegression())
# buraya yazÖrnek çözüm
import numpy as np
from sklearn.base import clone
from sklearn.model_selection import KFold
from sklearn.datasets import load_breast_cancer
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
X, y = load_breast_cancer(return_X_y=True)
model = make_pipeline(StandardScaler(), LogisticRegression())
skor = []
for egitim, dogrulama in KFold(n_splits=5, shuffle=True, random_state=0).split(X):
m = clone(model).fit(X[egitim], y[egitim])
skor.append(m.score(X[dogrulama], y[dogrulama]))
print(round(np.mean(skor), 3))Beklenen çıktı
0.972
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 100 örnek ve <code>n_splits=4</code> ile her doğrulama katmanında kaç örnek olur?
- 75
- 4
- 20
- 25 Doğru cevap
Açıklama: 100 / 4 = 25 doğrulama, kalan 75 eğitim.
2 Katmanlara bölmeden önce karıştır.
kf = KFold(n_splits=5, ____=True, random_state=0)
kf = KFold(n_splits=5, shuffle=True, random_state=0)
Açıklama: shuffle=True sıralı veride dengesiz katmanları önler.
3 Bölücüleri eşleştir.
| Kavram | Anlamı |
|---|---|
KFold |
K ardışık parça |
LeaveOneOut |
Her seferinde bir örnek |
shuffle=True |
Önce karıştırır |
split(X) |
İndeks üretir |