K-fold cross-validation, bir makine öğrenmesi modelinin performansını daha güvenilir bir şekilde değerlendirmek için veri setini k adet eşit parçaya (fold) böler. Her iterasyonda bir parça test seti, kalan k-1 parça eğitim seti olarak kullanılır. Bu işlem k kez tekrarlanır ve elde edilen performans metriklerinin ortalaması alınarak modelin genelleme başarısı ölçülür. Bu yöntem, tek bir eğitim-test ayrımına göre daha düşük varyanslı ve daha sağlam tahminler sunar.
K-fold Cross-Validation Neden Kullanılır?
Basit bir eğitim-test ayrımı (%80-20 gibi) genellikle yeterli değildir. Modelin başarısı, verinin nasıl bölündüğüne bağlı olarak büyük farklılıklar gösterebilir. K-fold CV, tüm verinin hem eğitim hem de test olarak kullanılmasını sağlayarak bu rastgeleliğin etkisini azaltır. Özellikle sınırlı veriyle çalışırken, her örneğin hem eğitim hem de testte yer alması modelin daha iyi değerlendirilmesine olanak tanır. Ayrıca hiperparametre optimizasyonu sırasında model seçimi için de yaygın olarak kullanılır. Örneğin, bir Destek Vektör Makinesi modelinde çekirdek fonksiyonu ve düzenlileştirme parametrelerini seçerken K-fold CV ile karşılaştırma yapabilirsiniz.
K Değeri Nasıl Seçilir?
k değeri tipik olarak 5 veya 10 olarak seçilir. k=5 ile her fold %20 test verisi içerirken, k=10 ile %10 test verisi kullanılır. Daha büyük k değerleri (örneğin 20) daha düşük yanlılık (bias) sağlar ancak hesaplama maliyetini artırır ve varyansı yükseltebilir. Pratikte en yaygın tercih k=10'dur. Aşırı durumda, k=N (veri sayısı) Leave-One-Out CV (LOOCV) olarak bilinir ve küçük veri setleri için uygundur. Seçim yaparken veri seti büyüklüğü, model eğitim süresi ve istenen güven düzeyi göz önünde bulundurulmalıdır.
K-fold Cross-Validation Adım Adım Nasıl Uygulanır?
- Veriyi Karıştırma (Shuffle): Veri setini rastgele karıştırın. Eğer sınıflandırma problemi ise sınıf dağılımını korumak için tabakalı (stratified) karıştırma tercih edilir.
- Fold’lara Ayırma: Veriyi k adet eşit büyüklükte (mümkün olduğunca) parçaya bölün.
- Model Eğitimi ve Değerlendirme: Her bir fold’u test seti, kalan k-1 fold’u eğitim seti olarak kullanarak modeli eğitin ve istenen metriği (doğruluk, F1 skoru, RMSE vb.) hesaplayın.
- Sonuçları Toplama: k adet metriğin ortalamasını ve standart sapmasını alarak modelin nihai performansını raporlayın.
Bu adımları uygularken, veri sızıntısına (data leakage) karşı dikkatli olunmalıdır. Örneğin, özellik ölçeklendirme işlemi her fold için eğitim verisi üzerinden hesaplanmalı ve test verisine uyarlanmalıdır; aksi halde model hatalı şekilde değerlendirilir.
K-fold vs Train-Test Split: Temel Farklar
| Özellik | Train-Test Split | K-fold CV |
|---|---|---|
| Veri Kullanımı | Her örnek yalnız bir kez testte | Her örnek birden fazla testte |
| Varyans | Yüksek (bölünmeye duyarlı) | Düşük (ortalama alınır) |
| Hesaplama Maliyeti | Düşük | Yüksek (k kat eğitim) |
| Küçük Veri İçin Uygunluk | Kötü | İyi |
Sık Yapılan Hatalar
- Karıştırmamak: Veriyi karıştırmadan fold’lara ayırmak, özellikle sıralı verilerde (zaman serisi) hatalı sonuçlara yol açar. Zaman serilerinde ise ileriye dönük (forward) CV kullanılmalıdır.
- Tabakalama İhmal Etmek: Dengesiz sınıf dağılımlarında tabakalı (stratified) CV kullanılmazsa bazı fold’lar hiç belirli bir sınıfı içermeyebilir.
- Hiperparametre Sızıntısı: Hiperparametre optimizasyonu yaparken, en iyi parametreleri seçmek için aynı CV sonuçlarını kullanmak, aşırı uyuma (overfitting) neden olur. Bunun için ayrı bir doğrulama seti veya iç içe (nested) CV kullanılmalıdır.
- Çok Küçük k Seçmek: k=2 gibi küçük değerler yüksek yanlılığa yol açar ve modelin gerçek performansını yansıtmaz.
Pratikte Dikkat Edilmesi Gerekenler
K-fold CV, hiperparametre ayarlama ve model seçiminde yaygın kullanılsa da, nihai modelin eğitimi için genellikle tüm veri kullanılır. Bu nedenle, CV sonuçları modelin beklenen performansı hakkında fikir verir. Ayrıca, kümeleme algoritmalarının değerlendirilmesinde olduğu gibi, bazı denetimsiz öğrenme yöntemlerinde CV doğrudan uygun olmayabilir; bu durumda farklı iç değerlendirme metrikleri kullanılır.
K-fold CV’nin en önemli avantajı, modelin varyansını düşürmesi ve daha güvenilir bir performans tahmini sunmasıdır. Ancak hesaplama maliyeti arttığından, büyük veri setlerinde k değeri düşük tutulabilir veya tek bir train-test split yeterli olabilir.
Sonuç
K-fold cross-validation, makine öğrenmesi projelerinde model doğrulamanın altın standardıdır. Veri kullanımını maksimize ederken yanlılığı ve varyansı dengeler. Doğru uygulandığında, modelin genelleme yeteneği hakkında güvenilir bilgi verir. Özellikle küçük veri setlerinde ve hiperparametre optimizasyonunda vazgeçilmezdir. Unutmayın: Her zaman veriyi karıştırın, tabakalama gerekiyorsa uygulayın ve sızıntılara karşı dikkatli olun.
Sık Sorulan Sorular
K-fold cross-validation neden kullanılır?
Basit eğitim-test ayrımına göre daha düşük varyanslı ve daha güvenilir performans tahmini sağlar. Tüm veri hem eğitim hem test olarak kullanılır, bu da modelin genelleme başarısını daha iyi ölçer.
K değeri kaç olmalı?
En yaygın değerler 5 ve 10'dur. K=10 genellikle iyi bir denge sunar. Veri seti büyüdükçe daha küçük k değerleri (örneğin 5) tercih edilebilir. Aşırı küçük verilerde Leave-One-Out (k=N) kullanılabilir.
Stratified K-fold nedir?
Stratified K-fold, her fold’da sınıf dağılımının tüm veri setiyle aynı oranda olmasını sağlar. Özellikle dengesiz sınıflara sahip veri setlerinde, modelin her sınıfı temsil eden verilerle değerlendirilmesini garanti eder.
K-fold cross-validation ne zaman kullanılmamalı?
Zaman serisi verilerinde standart K-fold uygun değildir çünkü gelecekteki veriler geçmişle eğitilmiş modelde kullanılamaz. Ayrıca çok büyük veri setlerinde hesaplama maliyeti yüksek olabilir; bu durumda tek bir train-test split veya daha küçük k tercih edilebilir.
K-fold ile Leave-One-Out arasındaki fark nedir?
Leave-One-Out (LOOCV), k değerinin veri sayısına eşit olduğu özel bir K-fold türüdür. Her adımda yalnızca bir örnek test seti olur. LOOCV neredeyse yansız tahmin verir ancak hesaplama maliyeti çok yüksektir ve varyansı da artırabilir.






