Makine öğrenmesi modellerinin başarımını değerlendirirken tek bir eğitim-test ayrımı yapmak genellikle yanıltıcı olabilir. Verinin rastgele bölünmesi, modelin belirli bir örneklem üzerindeki performansını olduğundan iyi veya kötü gösterebilir. K-fold cross-validation ise veriyi daha verimli kullanarak modelin genelleme yeteneğini daha güvenilir bir şekilde ölçmenizi sağlar. Bu yazıda, k-fold cross-validation'ın ne olduğu, türleri, avantajları ve uygulama adımları üzerinde duracağız.
K-fold Cross-Validation Nedir?
K-fold cross-validation, veri setini k adet eşit boyutlu parçaya (fold) bölen bir model değerlendirme tekniğidir. Her bir iterasyonda, k-1 parça eğitim için kullanılırken, kalan bir parça test için ayrılır. Bu işlem k kez tekrarlanır ve her parça tam olarak bir kez test seti olur. Sonuç olarak, k farklı model performans metriği elde edilir ve bunların ortalaması alınarak nihai başarım tahmin edilir.
Örneğin 5-fold cross-validation uygulandığında veri %80 eğitim, %20 test olacak şekilde 5 farklı bölünme ile değerlendirilir. Bu yöntem, özellikle küçük veri setlerinde daha güvenilir sonuçlar verir ve overfitting riskini azaltır.
Neden K-fold Cross-Validation Kullanmalısınız?
Tek bir train-test ayrımına güvenmenin dezavantajlarından bazıları şunlardır:
- Veri israfı: Verinin büyük bir kısmı eğitim için ayrıldığında test seti küçük kalabilir.
- Yanlı varyans: Rastgele bölünme nedeniyle performans ölçümü, verinin belirli bir dağılımına aşırı duyarlı olabilir.
- Parametre ayarı: Hiperparametre optimizasyonunda tek bir ayrım, seçilen parametrelerin özel olarak o bölünmeye uyum sağlamasına neden olabilir.
K-fold cross-validation tüm bu sorunları ortadan kaldırır. Her veri noktası hem eğitim hem de test için kullanıldığından, modelin gerçek performansına dair daha düşük yanlı ve daha düşük varyanslı bir tahmin sunar.
K-fold Cross-Validation Türleri
1. Standart K-fold
Veri rastgele k parçaya bölünür. Sınıfların dengesiz olduğu durumlarda bazı fold'larda belirli bir sınıf hiç bulunmayabilir. Bu nedenle standart k-fold, genellikle dengeli sınıflandırma problemlerinde tercih edilir.
2. Stratified K-fold
Her fold'da sınıf dağılımının orijinal veri setindekiyle aynı olmasını sağlar. Dengesiz veri setlerinde çok daha güvenilir sonuçlar verir. Dengesiz veri setlerinde makine öğrenmesi yazımızda bu teknikle ilgili daha fazla bilgi bulabilirsiniz.
3. Leave-One-Out (LOO)
k = n (veri sayısı) olduğunda her iterasyonda sadece bir örnek test olarak kullanılır. Çok küçük veri setleri için uygundur ancak hesaplama maliyeti yüksektir.
4. Group K-fold
Birbirine bağımlı örneklerin (örneğin aynı kişiden alınan birden fazla kayıt) aynı fold içinde kalmasını sağlar. Veri sızıntısını önlemek için özellikle zaman serisi veya hasta bazlı çalışmalarda kullanılır.
K-fold Cross-Validation Uygulama Adımları
- Veriyi k fold'a bölün: Veriyi yaklaşık eşit boyutlu k parçaya (genellikle 5 veya 10) ayırın. Stratified k-fold kullanıyorsanız sınıf dağılımlarını koruyun.
- Her fold için eğitim ve test yapın: i=1'den k'ya, i. fold'u test seti, geri kalanı eğitim seti olarak kullanın. Modeli eğitin ve seçtiğiniz metrikle (doğruluk, F1, AUC vb.) performansı kaydedin.
- Performansları toplayın: tüm k denemede elde edilen metriklerin ortalamasını ve standart sapmasını hesaplayın. Ortalama, modelin genel performansını; standart sapma ise farklı veri bölünmelerine karşı tutarlılığını gösterir.
- Hiperparametre optimizasyonu: Farklı hiperparametre kombinasyonlarını değerlendirmek için k-fold cross-validation'ı iç içe döngülerde (nested cross-validation) veya Lojistik Regresyon vs SVM gibi modelleri karşılaştırmak için kullanabilirsiniz.
k Değeri Nasıl Seçilir?
Genel bir kural olarak k=5 veya k=10 yaygın olarak kullanılır. k değeri arttıkça yanlı azalır ancak varyans artar ve hesaplama maliyeti yükselir. Küçük veri setlerinde daha yüksek k (örneğin 10) tercih edilirken, büyük veri setlerinde 5 yeterli olabilir. LOO ise sadece çok küçük veri setlerinde (<100 örnek) önerilir.
K-fold Cross-Validation ile İlgili Sık Yapılan Hatalar
- Veri sızıntısı: Eğitim ve test setleri arasında bilgi akışına izin vermek. Örneğin, özellik ölçeklendirme işlemini tüm veriye uygulamak yerine her fold içinde ayrı yapılmalıdır.
- Yanlış k seçimi: Çok düşük k (örneğin 2) yüksek yanlı, çok yüksek k (örneğin 20) ise yüksek hesaplama maliyeti ve artan varyansa yol açar.
- Stratified k-fold kullanmamak: Dengesiz sınıflarda standart k-fold, bazı fold'larda sınıf temsiliyetinin kaybolmasına neden olabilir.
- Son modeli eğitirken tüm veriyi kullanmamak: Cross-validation sadece model seçimi ve değerlendirmesi içindir. Son modelinizi tüm veri setiyle eğitmeli ve yeni veri üzerinde test etmelisiniz.
Değerlendirme Metrikleri ile Birlikte Kullanımı
K-fold cross-validation sonuçlarını yorumlarken tek bir metriğe odaklanmak yerine birden fazla metrik kullanmak daha sağlıklıdır. Örneğin, ROC AUC vs Precision-Recall AUC yazımızda dengesiz verilerde hangi metriklerin daha güvenilir olduğunu incelemiştik. Cross-validation ile bu metriklerin ortalamasını alarak daha sağlam bir değerlendirme yapabilirsiniz.
Sonuç
K-fold cross-validation, makine öğrenmesi projelerinde model başarımını güvenilir bir şekilde ölçmek için vazgeçilmez bir araçtır. Doğru şekilde uygulandığında, overfitting riskini azaltır, veri kullanımını optimize eder ve daha genellenebilir modeller geliştirmenize yardımcı olur. Yeni bir model üzerinde çalışıyorsanız, mutlaka cross-validation ile değerlendirmenizi yapın ve sonuçlarınıza güvenin.
Sık Sorulan Sorular
K-fold cross-validation kaç fold kullanmalıyım?
Genel olarak 5 veya 10 fold yaygındır. Küçük veri setlerinde 10 fold, büyük verilerde 5 fold yeterli olabilir. Veri boyutunu ve hesaplama kaynaklarınızı göz önünde bulundurun.
Stratified k-fold ile standart k-fold arasındaki fark nedir?
Stratified k-fold, her fold'da sınıf dağılımını korur. Dengesiz veri setlerinde standart k-fold, bazı fold'larda hiçbir örneği olmayan sınıflar oluşturabileceği için stratified k-fold tercih edilmelidir.
K-fold cross-validation sonrasında modelimi nasıl eğitmeliyim?
Cross-validation sadece model seçimi ve değerlendirmesi içindir. En iyi hiperparametreleri belirledikten sonra, nihai modeli tüm veri seti ile eğitip yeni veri üzerinde test etmelisiniz.
K-fold cross-validation'da veri sızıntısı nasıl önlenir?
Özellik ölçeklendirme, eksik veri tamamlama gibi veri ön işleme adımları her fold içinde eğitim verisine uygulanmalı, dönüşüm parametreleri test verisine aynen aktarılmalıdır. Bu, bilgi sızıntısını önler.






