Python'da k-fold çapraz doğrulama (adım adım)


Bir modelin veri seti üzerindeki performansını değerlendirmek için modelin yaptığı tahminlerin gözlemlenen verilerle ne kadar iyi eşleştiğini ölçmemiz gerekir.

Bunu yapmak için yaygın olarak kullanılan bir yöntem, aşağıdaki yaklaşımı kullanan k-katlı çapraz doğrulama olarak bilinir:

1. Bir veri kümesini rastgele olarak yaklaşık olarak eşit büyüklükte k gruba veya “katlamaya” bölün.

2. Tutucu set olarak kıvrımlardan birini seçin. Şablonu kalan k-1 kıvrımlarına göre ayarlayın. Gerilmiş kattaki gözlemler üzerinden MSE testini hesaplayın.

3. Her seferinde farklı bir kümeyi dışlama kümesi olarak kullanarak bu işlemi k kez tekrarlayın.

4. Genel test MSE’sini k test MSE’sinin ortalaması olarak hesaplayın.

Bu öğretici, Python’da belirli bir model için k-katlı çapraz doğrulamanın nasıl gerçekleştirileceğine ilişkin adım adım bir örnek sağlar.

Adım 1: Gerekli Kitaplıkları Yükleyin

Öncelikle bu örnek için gereken fonksiyonları ve kütüphaneleri yükleyeceğiz:

 from sklearn. model_selection import train_test_split
from sklearn. model_selection import KFold
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd

2. Adım: Verileri oluşturun

Daha sonra, x1 ve x2 olmak üzere iki tahmin değişkeni ve tek bir yanıt değişkeni y içeren bir pandas DataFrame oluşturacağız.

 df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
                   ' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
                   ' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})

Adım 3: K Katlamalı Çapraz Doğrulama Gerçekleştirin

Daha sonra veri setine çoklu doğrusal regresyon modeli yerleştireceğiz ve modelin performansını değerlendirmek için LOOCV gerçekleştireceğiz.

 #define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']

#define cross-validation method to use
cv = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )

#build multiple linear regression model
model = LinearRegression()

#use k-fold CV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
                         cv=cv, n_jobs=-1)

#view mean absolute error
mean(absolute(scores))

3.6141267491803646

Sonuçtan ortalama mutlak hatanın (MAE) 3,614 olduğunu görebiliriz. Yani, model tahmini ile gerçekte gözlemlenen veriler arasındaki ortalama mutlak hata 3,614’tür.

Genel olarak MAE ne kadar düşük olursa, model gerçek gözlemleri o kadar iyi tahmin edebilir.

Model performansını değerlendirmek için yaygın olarak kullanılan bir diğer ölçüm, ortalama karekök hatadır (RMSE). Aşağıdaki kod, bu metriğin LOOCV kullanılarak nasıl hesaplanacağını gösterir:

 #define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']

#define cross-validation method to use
cv = KFold ( n_splits = 5 , random_state = 1 , shuffle = True ) 

#build multiple linear regression model
model = LinearRegression()

#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
                         cv=cv, n_jobs=-1)

#view RMSE
sqrt(mean(absolute(scores)))

4.284373111711816

Sonuçtan, ortalama kare hatasının (RMSE) 4,284 olduğunu görebiliriz.

RMSE ne kadar düşük olursa, model gerçek gözlemleri o kadar iyi tahmin edebilir.

Uygulamada, genellikle birkaç farklı model yerleştiririz ve hangi modelin en düşük test hatası oranlarını ürettiğine ve dolayısıyla kullanılacak en iyi model olduğuna karar vermek için her modelin RMSE veya MAE’sini karşılaştırırız.

Ayrıca bu örnekte k=5 katlamayı seçtiğimizi, ancak istediğiniz sayıda katlamayı seçebileceğinizi unutmayın.

Pratikte genellikle 5 ile 10 kat arasında seçim yaparız, çünkü bu, güvenilir test hatası oranları üreten en uygun kat sayısıdır.

Sklearn’in KFold() işlevine ilişkin tüm belgeleri burada bulabilirsiniz.

Ek kaynaklar

K-Fold Çapraz Doğrulamaya Giriş
Python’da Doğrusal Regresyon İçin Tam Bir Kılavuz
Python’da Birini Dışarıda Bırakma Çapraz Doğrulama

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir