Cross Validation Nedir, Nasıl Çalışır ve Mantığı Nedir
Makine Öğrenmesinde bazı durumlarda model verilen eğitim verisini (training data) çok iyi öğrenir ancak test için verilen veride ise kötü performans gösterebilir. Buna terimsel olarak aşırı uyma (overfitting) denir. Bu durum istenilen bir şey değildir. Bunun sebebi ise basitçe, bu modelin gerçek dünyadaki verilerle test edildiği zaman güzel performans vermesinin istenmesidir.
Peki bu durumu (overfitting) kaldırmak için neler yapılabilir, bugün onlardan birini göreceğiz.
CROSS VALIDATION
Üstte gösterilen şema kısaca makine öğrenmesinde eğitim nasıl olarak gerçekleştiğini gösteriyor.
- parameters modelin parametreleri olarak yer alır.
- Cross Validation'ı göreceğiz.
- Best Parameters modelin nasıl hangi parametreler ile en iyi performans vereceğini gösterir.
Amacımız modelin en iyi çalıştığı parametreli bulmak. Böylece veriden en çok verimi alabiliriz.
Peki bu Cross Validation nasıl çalışır.
Varsayalım ki elimizde \(S\) eğitim verisi var. Diyelim ki elimizde \(k\) tane model var. Akla ilk gelen şey
- Bu her model \(M_{i}\) ı \(S\) verisi üzerinde eğitmek bir hipotez almak
- En düşük eğitme hatası (training error) olan modeli seçmek
Ne yazık ki bu algoritma gerçek hayatta işe yaramıyor. Polinomsal verileri düşünün. Polinomun derecesi yükseldikçe model \(S\) verisinde daha iyi öğrenecek ve bundan dolayı daha az hata verecek.
Bundan dolayı bu metod her zaman en yüksek dereceli modeli seçecek ve bu da genellikle kötü bir sonuç doğuruyor.
HOLD OUT CROSS VALIDATION
Şimdi bundan daha iyi çalışacak bir algoritma verelim. Basit bir Hold out (Tutma) Cross Validation'da yapılan
- Eğitme verimiz \(S\)'i rastgele \(S_{eğitme}\) ve \(S_{test}\) olarak %70 ve %30 oranında ayırmak.
- Daha sonra her model \(M_{i}\)'ı \(S_{eğitme}\) verisi üzerinde eğitip bir hipotez almak
- Daha sonra \(S_{test}\) üzerinde test edip en düşük hatalı hipotez \(h_{i}\) seçmek.
Modelin daha önce görmediği veri ile test ettiğimiz için daha iyi bir generalization error elde ediyoruz.
Ancak burada da bir sorun var. Testi yapacağız diye verimizin %30 unu kullandık. Eğer elimizde çok veri yoksa bu modelin eğitimini kısıtlayabilir.
K-FOLD CROSS VALIDATION
Bundan dolayı şimdi k-fold Cross Validation'a bakacağız. Adımlar
- \(S\) eğitme verimizi rastgele \(k\) dosyaya ayırıyoruz. Bu kümelere de \(S_{1},..., S_{k}\) diyelim.
- Her bir model \(M_{i}\) için
- her bir \( j = 1, ..., k \) için
- Model \(M_{i}\)'yi \(S_{1}\cup ...S_{j-1} \cup S_{j+1} \cup ... S_{k} \) yani \(S_{j}\) hariç her veri kümesinde eğitmek
- Model \(M_{i}\)'yi \(S_{j}\) üzerinde test etmek
- Model \(M_{i}\) için bütün \(j\) ler üzerinden hatayı hesaplayıp, bu hataların ortalamasını almak
- En düşük hatalı \(M_{i}\) seçmek
Genel olarak \( k= 10\) seçilebiliyor.
Bu yöntemle beraber modelimiz verimizin tüm kısmıyla test edildiği için daha iyi bir sonuç verebiliyor. Kısaca söyleyeceklerim bu kadar.
References:
- http://cs229.stanford.edu/syllabus-autumn2018.html
- https://scikit-learn.org/stable/modules/cross_validation.html


Yorumlar
Yorum Gönder