Overfitting Nedir?
Bu durumu bir öğrencinin sınavı üzerinde aşırı çalışmasına benzetebilirsiniz. Öğrenci tüm soruları ezberler, ancak sınavda farklı sorular sorulduğunda başarılı olamaz.
Overfitting'in Belirtileri:
- Eğitim verisi üzerinde düşük hata oranı, ancak test verisi üzerinde yüksek hata oranı.
- Modelin karmaşık olması, çok fazla parametreye sahip olması.
- Eğitim verisiyle çok iyi uyum sağlarken, test verisinde başarısızlık.
Underfitting Nedir?
Underfitting, genellikle modelin çok basit olduğunda veya yeterli sayıda özellik kullanmadığında görülür. Bir öğretmenin çok az konuyu işleyip öğrencisine tam anlamıyla hazırlık yapmaması gibi bir şeydir.
Underfitting'in Belirtileri:
- Hem eğitim verisi hem de test verisi üzerinde yüksek hata oranı.
- Modelin çok basit olması, yani çok az parametreye sahip olması.
- Veriyi çok iyi öğrenemediği için düşük doğruluk oranı.
Overfitting ve Underfitting'i Tespit Etme ve Çözme Yolları
# Örnek 1: Overfitting Tespiti ve Çözümü
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# Veriyi oluşturuyoruz
X = np.random.rand(100, 1) * 10
y = 2 * X + np.random.randn(100, 1) * 2
# Eğitim ve test verisi olarak bölelim
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Modeli oluşturuyoruz
model = LinearRegression()
model.fit(X_train, y_train)
# Tahminler yapıyoruz
y_pred_train = model.predict(X_train)
y_pred_test = model.predict(X_test)
# Hata oranlarını hesaplıyoruz
train_error = mean_squared_error(y_train, y_pred_train)
test_error = mean_squared_error(y_test, y_pred_test)
# Sonuçları yazdırıyoruz
print(f"Eğitim hatası: {train_error}")
print(f"Test hatası: {test_error}")
Bu kodda eğitim verisi ile yapılan tahminlerin hatası düşük olabilirken, test verisi üzerinde yüksek bir hata gözlemlenirse overfitting'den bahsedebiliriz. Bu durumda, modelin karmaşıklığını azaltmak veya daha fazla veri ile eğitmek gerekebilir.
# Örnek 2: Underfitting Tespiti ve Çözümü
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
# Polinom modelini kullanıyoruz
poly_model = make_pipeline(PolynomialFeatures(degree=5), LinearRegression())
poly_model.fit(X_train, y_train)
# Tahminler yapıyoruz
y_pred_train_poly = poly_model.predict(X_train)
y_pred_test_poly = poly_model.predict(X_test)
# Hata oranlarını hesaplıyoruz
train_error_poly = mean_squared_error(y_train, y_pred_train_poly)
test_error_poly = mean_squared_error(y_test, y_pred_test_poly)
# Sonuçları yazdırıyoruz
print(f"Polinom Eğitim hatası: {train_error_poly}")
print(f"Polinom Test hatası: {test_error_poly}")
Bu kodda, polinom regresyon modeli kullanarak eğitim verisindeki örüntüleri daha iyi öğrenmesini sağlıyoruz. Daha karmaşık bir model, underfitting sorununu çözebilir.
Overfitting ve Underfitting'i Önlemek İçin Kullanabileceğiniz Yöntemler
- Modeli Basitleştirmek veya Karmaşıklaştırmak: Modelin karmaşıklığını arttırmak (underfitting için) veya azaltmak (overfitting için) etkili olabilir.
- Düzenlileştirme (Regularization): L2 veya L1 düzenlileştirme, modelin aşırı karmaşıklaşmasını engeller.
- Cross-Validation (Çapraz Doğrulama): Modelinizi farklı veri alt kümeleriyle test etmek, overfitting'i engelleyebilir.