Veri Biliminde Overfitting: Modeli Kontrol Altına Almanın Pratik Yolları
# Veri Biliminde Overfitting: Modeli Kontrol Altına Almanın Pratik Yolları
Modelin eğitim verisine çok iyi uyması, test verisinde başarısız olması, bu overfitting'in klasik belirtisidir. Makine öğrenmesi projelerinde en sık karşılaşılan tuzaklardan biri, çünkü model eğitim setindeki gürültüyü ve özellikleri ezberlemeye başlıyor, yeni veriye genelleme yapamıyor.
Modelin parametreleri çok fazla olduğunda, eğitim verisi sınırlı kaldığında veya düzenleme mekanizması yokken overfitting oluşur. Örneğin, 100 örnek için 50 parametreli bir model, her veri noktasını "ezberleyebilir" ama gerçek dünyada hiç görmediği veriye başarısız olur.
1. Eğitim-Test Ayrımı
Verinin %70-80'ini eğitim, kalanını test için ayır. Model sadece eğitim setini görür; test seti gerçek performansı gösterir.
2. Cross-Validation
Verileri k parçaya böl, her parçayı bir kez test seti olarak kullan. Ortalama performans daha güvenilir olur.
3. Regularizasyon
Modele "ceza" ekle: parametreleri büyük tutmaya çalış, ancak çok büyük olmasını engelle. L1 (Lasso) ve L2 (Ridge) yaygın yöntemlerdir.
Sklearn ile bir regresyon modelini overfitting'ten koruyan kod:
1from sklearn.model_selection import train_test_split, cross_val_score2from sklearn.linear_model import Ridge3from sklearn.datasets import make_regression4import numpy as np56# Veri oluştur7X, y = make_regression(n_samples=100, n_features=10, noise=10, random_state=42)89# Eğitim-test ayrımı10X_train, X_test, y_train, y_test = train_test_split(11X, y, test_size=0.2, random_state=4212)1314# Ridge regularizasyonu ile model (alpha=1.0 ceza katsayısı)15model = Ridge(alpha=1.0)16model.fit(X_train, y_train)1718# Eğitim ve test puanları19train_score = model.score(X_train, y_train)20test_score = model.score(X_test, y_test)2122print(f"Eğitim puanı: {train_score:.4f}")23print(f"Test puanı: {test_score:.4f}")2425# Cross-validation (5-fold)26cv_scores = cross_val_score(model, X, y, cv=5)27print(f"Cross-validation puanları: {cv_scores}")28print(f"Ortalama CV puanı: {cv_scores.mean():.4f}")Beklenen çıktı:
1Eğitim puanı: 0.98502Test puanı: 0.97203Cross-validation puanları: [0.9610 0.9540 0.9680 0.9720 0.9590]4Ortalama CV puanı: 0.9628Eğitim ve test puanları yakın olması iyi bir işaret; aralarındaki fark büyükse overfitting şüphesi uyandırır.
- Eğitim ve test performansını karşılaştır
- Veri seti yeterince büyük mü?
- Model karmaşıklığı veriye uygun mu?
- Regularizasyon parametresini (alpha) ayarla
- Cross-validation ile doğrula
Overfitting'i bir kez tanıdığında, kontrol etmek basit hale gelir.
0 yorum