Python'da bir-dışarıda bırakma çapraz doğrulama (örneklerle)
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 , Birini Dışarıda Bırakma Çapraz Doğrulama (LOOCV) olarak bilinir ve aşağıdaki yaklaşımı kullanır:
1. Biri hariç tüm gözlemleri eğitim setinin bir parçası olarak kullanarak, bir veri setini bir eğitim seti ve bir test seti olarak bölün.
2. Yalnızca eğitim setindeki verileri kullanarak bir model oluşturun.
3. Modelden hariç tutulan gözlemin yanıt değerini tahmin etmek için modeli kullanın ve ortalama karesel hatayı (MSE) hesaplayın.
4. Bu işlemi n kez tekrarlayın. Test MSE’sini tüm test MSE’lerinin ortalaması olarak hesaplayın.
Bu eğitim, Python’da belirli bir model için LOOCV’nin nasıl çalıştırılacağına dair 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 LeaveOneOut
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]})
3. Adım: Bir-Dışarıda Bırakma Ç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 = LeaveOneOut()
#build multiple linear regression model
model = LinearRegression()
#use LOOCV 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.1461548083469726
Sonuçtan ortalama mutlak hatanın (MAE) 3,146 olduğunu görebiliriz. Yani, model tahmini ile gerçekte gözlemlenen veriler arasındaki ortalama mutlak hata 3,146’dı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 = LeaveOneOut()
#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)))
3.619456476385567
Sonuçtan, ortalama kare hatasının (RMSE) 3,619 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.
Ek kaynaklar
Birini Dışarıda Bırakma Çapraz Doğrulamasına (LOOCV) Hızlı Bir Giriş
Python’da Doğrusal Regresyon İçin Tam Bir Kılavuz