Öğ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 veriyi öğrenemiyor. Hem training hem validation hataları yüksek.
İdeal Durum
Training ve validation hataları düşük ve birbirine yakın.
Overfitting
Model training verisini ezberliyor. Training hatası düşük, validation hatası yüksek.
🎮 İ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)
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
İDEAL
OVERFITTING
🐍 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
Altın Kural: Öğrenme eğrileri modelinizin "sağlık durumunu" gösterir. Düzenli olarak kontrol edin ve gerekli ayarlamaları yapın.