k-fold Cross Validation

Kategori: Machine Learning , 04 Ocak 2020 , JanFranco


Bu yazımda k-fold Cross Validation algoritmasını anlatacağım. Bu algoritmayı modellerimizin başarısını ölçmek için kullanırız. Çoğu çalışmamızda veriyi train ve test şeklinde ikiye ayırdık. Ve test kümesini standart bir oran olan 1/3 oranında almaya çalıştık.

---------- ++++++++++++++++++++++++++++++

Burada eksiler ile ifade edilen kısım test kümesi olsun, artılar ile ifade edilen kısım train kümesi olsun. Biz bu şekilde bir ayrım yaptığımızda ve modeli train kümesi ile eğittiğimizde sonuç çok sağlıklı olmayabilir. Çünkü model test kümesini asla görmüyor, o kısmı öğrenemiyor. Belki de kümeler tam tersi olsa başarı artabilirdi. İşte bu sorun karşısında k-fold Cross Validation algoritmasını kullanabiliriz.

Algoritma basitçe veri kümesini belirli bir sayıda bölüyor. Örneğin 5 parçaya bölelim. İlk parça test kümesi, kalan 4 parça train kümesidir. İlk adımda aslında daha önceden yaptığımız uygulamaların aynısını yapıyoruz. Bir sonraki adımda ilk parçayı değil ikinci parçayı test kümesi yapıyoruz, kalan parçalar train kümesi oluyor. Bu şekilde 5 adımda tüm parçaları kullanmış oluyoruz. Her bir adımda başarı ölçülüyor. Biz bu başarıların ortalamasını alabiliriz, maksimum değerini alabiliriz vs. Bu bize kalmış, algoritma bu şekilde çalışıyor. Daha iyi anlamak adına aşağıdaki görseli inceleyelim:

k-fold cross validation

Python ile bir örnek yapalım. Iris veri seti üzerinde çalışalım. Kütüphaneleri ve veriyi import edelim:


from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.model_selection import train_test_split, cross_val_score

df = load_iris()
x = df.data
y = df.target
Aradaki farkı görebilmek adına önceki uygulamalarımızda yaptığımı gibi veri train ve test şeklinde bölelim:


x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=.33)
KNN modelini kullanalım:


knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(x_train, y_train)
res = knn.predict(x_test)
Sonuçları görelim:


cm = confusion_matrix(res, y_test)
print(cm)
print("Accuracy = ", accuracy_score(res, y_test))

>>

[[15  0  0]
 [ 0 13  2]
 [ 0  1 19]]
Accuracy =  0.94
Şimdi cross_val_score methodunu kullanarak algoritmayı deneyelim. Parametre olarak oluşturduğumuz modeli, x_train ve y_train kümelerini vereceğiz. cv parametresini de 3 vererek 3 parça oluşturacağız:


crossValScore = cross_val_score(knn, x_train, y_train, cv=3)
print("Cross Validation Score = ", crossValScore.mean())
print("Standard Deviation = ", crossValScore.std())

>>

Cross Validation Score =  0.9595588235294118
Standard Deviation =  0.015597943702644428


Sonraki Yazı: Grid Search, Hyperparameter Optimization
Yorumlar

Henüz bir yorum bulunmuyor.