Cross-validation nedir?
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 13/112
- 5 dk
Cross-validation, veriyi k katmana bölerek modeli k kez değerlendirir.
Çapraz doğrulama ne çözer?
Tek bir eğitim/test bölmesinin skoru, hangi örneklerin teste düştüğüne bağlıdır. Çapraz doğrulama (CV) bu şansı ortadan kaldırır: veri katmanlara bölünür ve her katman sırayla doğrulama olur. Sonuç bir skor dağılımıdır.
for rs in range(5):
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=rs)
print(rs, round(model.fit(X_tr, y_tr).score(X_te, y_te), 3))
# skor bölmeden bölmeye birkaç puan oynarCV ayrıca veriyi verimli kullanır: her örnek hem eğitimde hem doğrulamada yer alır.
Bölmeye bağlı oynaklık
Bölme oynaklığını ölçmek için skorların standart sapmasına bakılır. Küçük veri setlerinde oynaklık büyüktür ve tek bölmeye dayanan kararlar yanıltıcı olur:
skorlar = cross_val_score(model, X, y, cv=10)
print(f"{skorlar.mean():.3f} ± {skorlar.std():.3f}")
print(skorlar.min(), skorlar.max()) # en kötü ve en iyi katmanİki modelin farkı, skorların standart sapmasından küçükse "eşit" kabul etmek daha güvenlidir.
Uygulama Bölme oynaklığı
5 farklı random_state (0-4) ile test_size=0.2 bölmeleri yap ve her birinde modeli eğitip test doğruluğunu topla. En küçük ve en büyük skoru round(..., 3) ile aynı satırda yazdır.
Başlangıç kodu
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())
from sklearn.model_selection import train_test_split
# buraya yazÖrnek çözüm
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())
from sklearn.model_selection import train_test_split
skorlar = []
for rs in range(5):
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=rs)
skorlar.append(model.fit(X_tr, y_tr).score(X_te, y_te))
print(round(min(skorlar), 3), round(max(skorlar), 3))Beklenen çıktı
0.965 0.974
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Çapraz doğrulama test kümesinin yerini tutar mı?
- Hayır; model seçimi CV ile, son ölçüm ayrı test kümesiyle yapılır Doğru cevap
- Evet, her zaman
- Yalnızca regresyonda
- Test kümesi gereksizdir
Açıklama: CV skoru seçim için kullanıldıkça iyimserleşir; bağımsız bir test hâlâ gerekir.
2 Tek bölmenin skorunu farklı tohumlarla tekrarla.
for rs in ____(5):
for rs in range(5):
Açıklama: range(5) 0'dan 4'e tohumlar üretir.
3 Kavramları eşleştir.
| Kavram | Anlamı |
|---|---|
katman (fold) |
Verinin bir parçası |
skorlar.std() |
Bölme oynaklığı |
test kümesi |
Son bağımsız ölçüm |
CV ortalaması |
Seçim ölçütü |