Makine Öğrenmesi
K-fold
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ğitim
Bü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.
Örnek çözümü göster
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))
Kendini test et
-
100 örnek ve <code>n_splits=4</code> ile her doğrulama katmanında kaç örnek olur?
Cevabı göster
25 — 100 / 4 = 25 doğrulama, kalan 75 eğitim.
-
Katmanlara bölmeden önce karıştır.
kf = KFold(n_splits=5, ____=True, random_state=0)
Cevabı göster
kf = KFold(n_splits=5, shuffle=True, random_state=0)
-
Bölücüleri eşleştir.
- KFold
- K ardışık parça
- LeaveOneOut
- Her seferinde bir örnek
- shuffle=True
- Önce karıştırır
- split(X)
- İndeks üretir
Sıradaki ders: cross_val_score