Makine Öğrenmesinde Train, Validation ve Test Kavramları ile Python Uygulaması

Yiğit Şener
3 min readJul 18, 2020

--

Makine öğrenmesi dünyası giderek genişliyor. Sürekli gelişen algoritmalar, yeni modelleme yöntemleri keşfedilse bile veri setlerinin ayrıştırılıp test edilmesi, modellerin iyileştirilmesi gibi süreçler hala en temeldeki training/test tasarımını korumaktadır. Aşağıdaki bölümlerde bir veri setinin Train, Test ve Validation (validasyon) olarak neye göre ayrıldığı ve ne işe yaradığı anlatılmaktadır.

Supervised (Gözetimli) makine öğrenmesi türünde veri seti içinde bir target/hedef değişken ve bir ya da daha fazla target alanı tahminlemek için kullanılan bağımlı değişken (input) mevcuttur.

Tablo 1: Veri Seti Yapısı

Yukarıdaki tabloya baktığımızda dikey olarak kolonların target ve features olarak ayrıldığını görmekteyiz. Burada makine öğrenmesi algoritmasını kurarken temel amaç olabildiğince hatasız şekilde target değişkenin tahmin edilebilmesidir. Dolayısıyla tahmin verilerinin ne kadar doğru olduğunu test edebilmek hem de modeli daha iyi optimize edebilmek için veri setini yatay olarak ayırmamız gerekiyor. Yukarıdaki örnek tabloda index bölümünde yer aldığı üzere 10 adet gözlem değeri bulunmaktadır. Bu gözlem değerleri üzerinde modelleme yapmadan önce yatay olarak 3 ayrı parçaya ayrılması gerekiyor ki bir bölümü üzerinde model çalışılsın (train) diğer bölüm üzerinde model iyileştirilebilsin (validation) ve başka bir bölümde de test edilebilsin.

Tablo 2: Train, Validation & Test

Tablo 2, tablo 1'in yatay halinde gösterimi olup train, validation ve test olarak nasıl ayrıldığını göstermektedir. Şimdi tek tek bu parçaların işlevlerini açıklayalım.

Train Veri Seti

Train veri seti üzerinde temel modelleme denemeleri yapılarak en doğru makine öğrenmesi algoritması seçilmeye çalışılır. Bu veri seti üzerinden en fazla örneklem alınan gözlemlerden (rows) oluşur. Tablo 2'de yer aldığı üzere %64 oranında veri setinden parça alınmıştır. Gözlem/veri sayısına bağlı olarak en az %60 en fazla %90 olarak şekilde datadan train için bölüm ayrılabilir.

Validation Veri Seti

Validation bölümü train veri seti içinden seçilir. Train veri seti üzerinde doğru model seçimi yapılarak algoritma belirlenir. Validation bölümünde ise uygulanan model iyileştirilmeye çalışılır. Bunun için hiper parametrik (hyperparameter tuning) uygulamalar denenerek en optimum katsayılar/ağırlıklar bulunmaya çalışılır. Özellikle çok büyük veri setleri üzerinde sürekli Train datası üzerinden çalışılamayacağı için küçük bir bölüm alınarak validation olarak tanımlanır.

Test Veri Seti

İçinde Validation datasının yer aldığı Train veri setinden kalan bölüme Test veri seti diyebiliriz. Bu bölümde tahminler ile gerçek veriler karşılaştırılır. Tablo 2'de yer alan test bölümü için ayrılmış %20'lik data üzerinde daha önce train veri seti üzerinden öğrenilmiş makine öğrenmesi modeli uygulanır. Uygulama esnasında test veri setindeki Target (‘y’ ile işaretli olan satır) değişkeni kaldırılır. Ardından kurulan modele test verisindeki değişkenler (‘x’ input değerleri) eklenerek modelden Target değişken tahmin edilmesi beklenir. Ardından tahmin edilen değişkenler ile daha önce veri setinden çıkarılan Target değişken karşılaştırılıp model performansı ölçülür.

Python Üzerinden Veri Setlerini Ayırma Uygulaması

Veri setlerinin ayrıştırılması için bir çok kütüphane kullanılabilir. Aşağıdaki örnekte gayet basit bir şekilde Sklearn kütüphanesi üzerinden nasıl parçalandığı anlatılmaktadır.

Data üzerinde validation ayırma yöntemi yerine çok daha efektif kullanılabilen cross-validation (k-fold) yaklaşımı bulunmaktadır. Bu yöntemin kullanımından aşağıdaki yazımdan ulaşabilirsiniz.

--

--