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.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Sklearn ile bir regresyon modelini overfitting'ten koruyan kod:

1from sklearn.model_selection import train_test_split, cross_val_score
2from sklearn.linear_model import Ridge
3from sklearn.datasets import make_regression
4import numpy as np
5
6# Veri oluştur
7X, y = make_regression(n_samples=100, n_features=10, noise=10, random_state=42)
8
9# Eğitim-test ayrımı
10X_train, X_test, y_train, y_test = train_test_split(
11X, y, test_size=0.2, random_state=42
12)
13
14# Ridge regularizasyonu ile model (alpha=1.0 ceza katsayısı)
15model = Ridge(alpha=1.0)
16model.fit(X_train, y_train)
17
18# Eğitim ve test puanları
19train_score = model.score(X_train, y_train)
20test_score = model.score(X_test, y_test)
21
22print(f"Eğitim puanı: {train_score:.4f}")
23print(f"Test puanı: {test_score:.4f}")
24
25# 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.9850
2Test puanı: 0.9720
3Cross-validation puanları: [0.9610 0.9540 0.9680 0.9720 0.9590]
4Ortalama CV puanı: 0.9628

Eğ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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz