| 3 dk okuma | 31 okunma

Model neden hata yapar? Overfitting ve Underfitting

Bir modelin başarısız olmasının sebebi çoğu zaman algoritma değil, öğrenme şeklidir.

Model neden hata yapar? Overfitting ve Underfitting

Bir makine öğrenmesi modeli kurduğunda ve ilk sonuçları gördüğünde genellikle iki durumdan biriyle karşılaşırsın: ya model eğitim verisinde çok iyi performans gösterir ama gerçek veride başarısız olur, ya da hem eğitim hem de test verisinde kötü sonuçlar üretir. Bu iki problem, AI dünyasında oldukça temel olan overfitting ve underfitting kavramlarıyla açıklanır ve neredeyse her projede karşına çıkar.

Underfitting durumu, modelin veriyi yeterince öğrenememesi anlamına gelir; yani model çok basit kalmıştır ve veri içindeki ilişkileri yakalayamaz. Bu genellikle modelin kapasitesinin düşük olması, yetersiz feature kullanımı ya da eğitim sürecinin eksik olması gibi sebeplerden kaynaklanır. Örneğin doğrusal olmayan bir ilişkiyi düz bir çizgiyle modellemeye çalışmak, underfitting’in klasik bir örneğidir.

Buna karşılık overfitting ise modelin veriyi “çok iyi” öğrenmesi ama aslında genelleme yapamamasıdır. Model, eğitim verisindeki tüm detayları, hatta gürültüyü bile ezberler ve bu yüzden yeni verilerle karşılaştığında başarısız olur. Bu durum özellikle küçük veri setlerinde veya gereğinden fazla karmaşık modeller kullanıldığında sıkça görülür.

Bu farkı daha somut görmek için basit bir örnek düşünelim: elimizde birkaç veri noktası var ve bu noktaları açıklamaya çalışıyoruz. Eğer modelimiz çok basitse, noktaların genel eğilimini bile yakalayamaz; eğer model çok karmaşıksa, tüm noktaların üzerinden geçen gereksiz kıvrımlı bir eğri çizer ve bu da genelleme hatasına yol açar.

Örnek: Farklı model davranışları

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# Veri
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([1, 4, 9, 16, 25])

# Basit model (underfitting)
model_simple = LinearRegression()
model_simple.fit(X, y)

# Karmaşık model (overfitting)
poly = PolynomialFeatures(degree=4)
X_poly = poly.fit_transform(X)

model_complex = LinearRegression()
model_complex.fit(X_poly, y)

# Tahmin
X_test = np.linspace(1, 5, 100).reshape(-1, 1)

plt.scatter(X, y)

plt.plot(X_test, model_simple.predict(X_test))
plt.plot(X_test, model_complex.predict(poly.transform(X_test)))

plt.show()


Bu örnekte basit model veriyi yeterince öğrenemezken, yüksek dereceli model veriye aşırı uyum sağlar ve gerçek dünyada genelleme yapma ihtimali düşer.

Bu problemleri çözmek için birkaç temel yaklaşım vardır. Overfitting’i azaltmak için daha fazla veri kullanmak, modeli sadeleştirmek veya regularization tekniklerine başvurmak etkili olabilir. Underfitting durumunda ise daha güçlü bir model seçmek, daha fazla feature eklemek ya da eğitim süresini artırmak gerekebilir. Burada önemli olan, modelin karmaşıklığı ile veri arasındaki dengeyi kurabilmektir.

Gerçek projelerde bu dengeyi sağlamak genellikle deneme-yanılma ve deneyim gerektirir; bu yüzden tek bir doğru çözüm yoktur, ancak doğru yaklaşım her zaman modelin hem eğitim hem de test performansını birlikte değerlendirmektir.

Gerçek Hayat

Bir kredi risk modeli düşün; eğer model geçmiş verileri ezberlerse (overfitting), yeni müşteriler için yanlış kararlar verir. Eğer modeli çok basit kurarsan (underfitting), riskli ve risksiz müşterileri ayırt edemezsin.

İyi bir model, ne veriyi ezberler ne de görmezden gelir; doğru model, genelleme yapabilen modeldir.

Ertan Dağdelen

Yazan

Ertan Dağdelen

Brain & Youth Information Worker, Author, .Net, Flutter, AJAX, Arduino & Esp32, Pcb, 3D, Galatasaray, Gemini

Bu yazıyı paylaş

Yorumlar (0)

Bu yazı için yorumlar kapalı.