← Modül 4

Öğrenme Eğrileri: Model Teşhis Laboratuvarı

Modelinizin neden iyi/kötü performans gösterdiğini anlamak için öğrenme eğrilerini kullanın. Overfitting, underfitting ve ideal durumu görsel olarak teşhis edin.

⚡ Hızlı Özet: Neyi Teşhis Edeceğiz?

Underfitting
Model çok basit
İdeal Durum
Mükemmel denge
Overfitting
Model çok karmaşık

Underfitting

Model veriyi öğrenemiyor. Hem training hem validation hataları yüksek.

🔍 Belirtiler: Yüksek bias, düşük variance

İdeal Durum

Training ve validation hataları düşük ve birbirine yakın.

🎯 Hedef: Düşük bias, düşük variance

Overfitting

Model training verisini ezberliyor. Training hatası düşük, validation hatası yüksek.

⚠️ Belirtiler: Düşük bias, yüksek variance

🎮 İNTERAKTİF ÖĞRENME EĞRİLERİ LABORATUVARI

Model karmaşıklığını ve veri miktarını değiştirerek öğrenme eğrilerinin nasıl değiştiğini görün!

📊 CANLI TEŞHİS

Model parametrelerini değiştirdikçe bu alan otomatik olarak güncellenecek...

🎯 UNDERFITTING ÇÖZÜMLERİ

  • Daha karmaşık model kullanın (daha yüksek dereceli polinom)
  • Daha fazla özellik ekleyin
  • Regularization (düzenlileştirme) azaltın
  • Model eğitim süresini artırın

💡 OVERFITTING ÇÖZÜMLERİ

  • Daha fazla veri toplayın
  • Regularization (Ridge, Lasso) artırın
  • Model karmaşıklığını azaltın
  • Feature selection (özellik seçimi) yapın
  • Early stopping (erken durdurma) kullanın

⚖️ BIAS-VARIANCE TRADEOFF (Ödünleşim)

Bias (Yanlılık) vs Variance (Varyans)

Bias: Modelin basitliğinden kaynaklanan hata. Underfitting'in nedeni.
Variance: Modelin gürültüye duyarlılığı. Overfitting'in nedeni.
Toplam Hata = Bias² + Variance + Gürültü

Altın Kural: Bias ve Variance arasında denge kurmalısınız. İkisinin toplamının minimum olduğu nokta ideal model karmaşıklığıdır.

🏥 MODEL TEŞHİS REHBERİ

UNDERFITTING

Training Error: Yüksek
Validation Error: Yüksek
Fark: Küçük
Çözüm: Modeli daha karmaşık hale getir

İDEAL

Training Error: Düşük
Validation Error: Düşük
Fark: Küçük
Durum: Mükemmel! Modeli koru

OVERFITTING

Training Error: Çok Düşük
Validation Error: Yüksek
Fark: Büyük
Çözüm: Regularization artır veya daha fazla veri topla

🐍 PYTHON'DA ÖĞRENME EĞRİLERİ

Scikit-learn ile Öğrenme Eğrileri

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import learning_curve
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline

# Pipeline oluştur (polinom regresyon)
model = Pipeline([
    ('poly', PolynomialFeatures(degree=3)),  # Karmaşıklığı değiştir
    ('linear', LinearRegression())
])

# Öğrenme eğrilerini hesapla
train_sizes, train_scores, val_scores = learning_curve(
    model, X, y, 
    cv=5,  # 5-fold cross-validation
    scoring='neg_mean_squared_error',
    train_sizes=np.linspace(0.1, 1.0, 10),
    n_jobs=-1
)

# MSE'ye çevir (negatiften pozitife)
train_scores_mean = -np.mean(train_scores, axis=1)
val_scores_mean = -np.mean(val_scores, axis=1)

# Görselleştir
plt.figure(figsize=(10, 6))
plt.plot(train_sizes, train_scores_mean, 'o-', color='blue', label='Training Error')
plt.plot(train_sizes, val_scores_mean, 'o-', color='red', label='Validation Error')
plt.xlabel('Training Set Size')
plt.ylabel('Mean Squared Error')
plt.title('Learning Curves')
plt.legend()
plt.grid(True)
plt.show()

Manuel Öğrenme Eğrileri

from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

def plot_learning_curves_manual(model, X, y):
    X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)
    
    train_errors, val_errors = [], []
    
    # Farklı training set boyutları için
    for m in range(1, len(X_train)):
        model.fit(X_train[:m], y_train[:m])
        
        y_train_predict = model.predict(X_train[:m])
        y_val_predict = model.predict(X_val)
        
        train_errors.append(mean_squared_error(y_train[:m], y_train_predict))
        val_errors.append(mean_squared_error(y_val, y_val_predict))
    
    # Grafik çiz
    plt.figure(figsize=(10, 6))
    plt.plot(train_errors, "r-+", linewidth=2, label="Training")
    plt.plot(val_errors, "b-", linewidth=3, label="Validation")
    plt.legend()
    plt.xlabel("Training set size")
    plt.ylabel("RMSE")
    plt.grid(True)
    plt.show()

# Kullanım
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

model = LinearRegression()
plot_learning_curves_manual(model, X, y)

# Farklı karmaşıklıktaki modelleri karşılaştır
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline

# Düşük karmaşıklık
model_low = Pipeline([
    ('poly', PolynomialFeatures(degree=1)),
    ('linear', LinearRegression())
])

# Yüksek karmaşıklık  
model_high = Pipeline([
    ('poly', PolynomialFeatures(degree=10)),
    ('linear', LinearRegression())
])

print("Düşük karmaşıklık (Underfitting):")
plot_learning_curves_manual(model_low, X, y)

print("Yüksek karmaşıklık (Overfitting):")
plot_learning_curves_manual(model_high, X, y)

🔧 PRATİK ÇÖZÜMLER

Underfitting Görüyorsanız

  • Polinom derecesini artırın (degree=2,3,4...)
  • Daha fazla özellik ekleyin
  • Daha güçlü model kullanın (Random Forest, XGBoost)
  • Regularization'ı azaltın (alpha küçültün)

Overfitting Görüyorsanız

  • Daha fazla veri toplayın
  • Regularization artırın (Ridge, Lasso)
  • Model karmaşıklığını azaltın
  • Feature selection yapın
  • Early stopping kullanın
  • Dropout (sinir ağlarında) ekleyin

🎯 AKILLI İPUÇLARI

Validation hatası training hatasından çok yüksekse: Overfitting var
İki hata da yüksek ve birbirine yakınsa: Underfitting var
Eğriler bir noktada birleşiyorsa: Daha fazla veri işe yaramaz
Eğriler arasındaki boşluk açılıyorsa: Daha fazla veri toplayın

Altın Kural: Öğrenme eğrileri modelinizin "sağlık durumunu" gösterir. Düzenli olarak kontrol edin ve gerekli ayarlamaları yapın.

✅ ÖĞRENDİKLERİMİZ

Öğrenme eğrileri overfitting/underfitting'i teşhis eder
Bias-variance tradeoff model performansını belirler
İdeal modelde her iki hata da düşük ve yakındır
Underfitting: Model basit, hatalar yüksek
Overfitting: Training hatası düşük, validation yüksek
Scikit-learn learning_curve ile otomatik analiz