Ana içeriğe geç

Underfitting nedir? ML Modellerinde Yüksek Önyargıyı (Bias) Tespit Etme ve Aşma

Underfitting'in ne olduğunu, bir modelde underfitting'i nasıl teşhis edeceğinizi ve underfitting'i düzeltmeye yönelik uygulanabilir stratejileri keşfedin; böylece modelleriniz veri kalıplarını doğru yakalayıp güvenilir tahminler sunar.
· 15 dk. oku

Yapay Zeka ile Keşfedin

Sonuçları tahmin etmek veya kalıpları ortaya çıkarmak için modeller kurarken çeşitli zorluklarla karşılaşırız. Yaygın engellerden biri, verilerinizdeki temel eğilimleri doğru şekilde yakalayan bir model oluşturmaktır. Bazen modeller çok basit kalır ve karmaşıklıkları öğrenemez, bu da zayıf performansa yol açar. Bu olgu Underfitting (yetersiz uyum) olarak bilinir.

Underfitting yaşayan bir model, yalnızca üzerinde eğitildiği verilerde kötü performans göstermekle kalmaz, aynı zamanda yeni, görülmemiş verilere de genelleyemez. Bu da gerçek dünyada öngörülerinizin güvenilmez olabileceği anlamına gelir. Underfitting'i fark etmek ve ele almak, sağlam ve etkili makine öğrenimi modelleri kurma yolunda önemli bir adımdır. 

underfitting

Görsel: Yazar

Bu yazıda underfitting'in ne olduğuna, neden ortaya çıktığına, nasıl fark edileceğine ve en önemlisi underfitting'in nasıl düzeltileceğine bakacağız. Makine öğrenimini uygulamalı olarak öğrenmek istiyorsanız, mutlaka Python ile Makine Öğrenimi Temelleri eğitim yolumuzu inceleyin. 

Underfitting nedir?

Underfitting kavramına ve karşıtı olan overfitting ile nasıl tezat oluşturduğuna daha yakından bakalım. Bu ayrımı anlamak, model tanılaması ve iyileştirme için temeldir.

overfitting vs underfitting

Görsel: Yazar

Basitçe ifade edersek, Underfitting bir makine öğrenimi modeli eğitim verilerindeki temel kalıpları yakalamak için fazla basit kaldığında ortaya çıkar. Açıkça eğriyi takip eden veri noktalarına düz bir çizgi uydurmaya çalıştığınızı hayal edin ve çizgi (modelimiz) yeterince karmaşık değildir. Underfitting yaşayan bir model yüksek önyargıya (bias) sahiptir; yani veri hakkında güçlü varsayımlar yapar (ör. doğrusal olmayan bir ilişkide doğrusal ilişki varsaymak). 

Veriyi iyi öğrenemediği için yalnızca eğitim verilerinde değil, yeni/görülmemiş verilerde (test verisi) de kötü performans gösterir. Ancak bu modeller genellikle düşük varyansa sahiptir; yani verinin farklı alt kümeleriyle eğitirseniz bile tahminleri çok değişmez. Basitlik onları tutarlı kılar, fakat tutarlı biçimde hatalı.

Matematiksel olarak bu durum, modelin beklenen hatasının bias-varyans ayrışımıyla ilişkilidir. Bir modelin beklenen hatası üç bileşene ayrılabilir: bias kare, varyans ve indirgenemez hata:

Burada:

  • E[(y - f̂(x))²] tahminin beklenen karesel hatasıdır.
  • Bias(f̂(x)), gerçek f(x) fonksiyonunu modelle yaklaştırmanın getirdiği hatayı ölçer.

  • Var(f̂(x)) farklı eğitim veri kümeleri için model tahmininin değişkenliğidir.

  • σ² indirgenemez hatayı temsil eder — veride tahmin edilemeyen doğal gürültü.

Underfitting durumunda hata üzerinde Bias(f̂(x)) terimi baskındır. Model fazla basittir; sistematik hatalara ve gerçek veri ilişkisinin yakalanamamasına yol açar.

Underfitting ve overfitting karşılaştırması

Underfitting, overfitting ile karşılaştırıldığında daha net anlaşılır. Underfitting modeller fazla basitken, overfitting modeller fazla karmaşıktır. Eğitim verisini fazla iyi öğrenirler; yalnızca temel kalıpları değil, gürültü ve rastlantısal dalgalanmaları da yakalarlar.

underfitting
how to fix underfitting

Bias-Varyans Dengesi - Görsel: Yazar

Underfitting ve Overfitting arasındaki temel farklara bakalım:

Özellik

Underfitting

Overfitting

Eğitim Hatası

Yüksek

Çok Düşük

Test Hatası

Yüksek

Yüksek

Model Karmaşıklığı

Düşük

Yüksek

Tahmin Davranışı

Tutarlı ama yanlış

Eğitim verisinde isabetli, yeni veride zayıf

Bu da bizi bias-varyans dengesi kavramına getirir.

  • Yüksek Bias (Underfitting): Basit modeller yüksek bias, düşük varyansa sahiptir. Tutarlı biçimde yanılırlar ama farklı eğitim verilerinde çok değişmezler.
  • Yüksek Varyans (Overfitting): Karmaşık modeller düşük bias, yüksek varyansa sahiptir. Eğitim verisini çok iyi uydururlar (düşük bias) ancak kullanılan eğitim verisine aşırı duyarlıdırlar, bu da yeni veride zayıf genellemeye yol açar. Bununla ilgili daha fazlasını Overfitting nedir? yazımızda öğrenebilirsiniz.

Amaç, tatlı noktayı bulmaktır: Gerçek kalıpları yakalayacak kadar karmaşık (düşük bias) ama gürültüyü öğrenmeyecek kadar da sade (düşük varyans) bir model.

Örnekler:

  • Underfitting Örneği: Boyut, konum, yaş vb. gibi unsurlara bağlı konut fiyatlarını yalnızca oda sayısıyla tahmin etmeye çalışmak. Model fazla basittir (yüksek bias) ve çoğu ev için kötü tahminler yapacaktır.
  • Overfitting Örneği: Eğitim kümenizdeki her bir veri noktasından kusursuz geçen, aşırı karmaşık bir polinom regresyon modeli kurmak. Bu model eğitim verisinde hatayı neredeyse sıfıra indirebilir; ancak eğitim kümesine özgü gürültüyü öğrendiği için (yüksek varyans) yeni evlerde çok kötü performans gösterecektir.

Modelinizin bu yelpazede nerede durduğunu anlamak, bir sonraki bölümlerde göreceğimiz gibi underfitting'i tespit etmek ve ele almak için önemlidir.

Underfitting Nedenleri ve Tanı Göstergeleri

Artık underfitting'in ne olduğunu bildiğimize göre, bunun neden ortaya çıktığını ve kendi projelerinizde nasıl tespit edebileceğinizi inceleyelim. Asıl nedeni saptamak, doğru önleme stratejisini seçmek için kritiktir. 

Underfitting'in başlıca nedenleri

Bir modeli underfitting'e götürebilecek birkaç etken vardır:

Yetersiz model karmaşıklığı

Seçilen algoritma, verinin temel yapısı için fazla basit olabilir. Örneğin, özniteliklerle hedef değişken arasındaki ilişki oldukça doğrusal olmayan bir yapıdayken doğrusal regresyon kullanmak. Model doğası gereği bu karmaşıklıkları yakalayacak kapasiteden yoksundur.

Yetersiz eğitim

Model yeterince uzun eğitilmemiş olabilir (ör. sinir ağlarında çok az epoch) veya uygun öğrenme parametreleriyle eğitilmemiştir. Eğitim süreci erken sonlanırsa, model kapasitesi olsa bile kalıpları öğrenmek için yeterli fırsat bulamaz.

Zayıf öznitelik temsili 

Modeli eğitmekte kullanılan öznitelikler, hedef değişkeni etkileyen temel faktörleri yeterince temsil etmiyor olabilir. Bu şunları içerebilir:

  • Önemli özniteliklerin eksikliği: Temel belirleyiciler veri setine dahil edilmemiştir.
  • İlgisiz öznitelikler: Veri seti gürültü veya sonuçla ilişkisi olmayan öznitelikler içermektedir; bu da basit bir modeli yanlış yönlendirebilir.
  • Dönüşüm gerektiren öznitelikler: Özniteliklerin ölçeklenmesi, normalleştirilmesi veya kodlanması (ör. kategorik değişkenler) gerekebilir.

Aşırı düzenlileştirme (regularization)

Düzenlileştirme teknikleri (L1 veya L2 cezaları gibi) temelde karmaşıklığa ceza ekleyerek overfitting'i önlemek için kullanılır. Ancak düzenlileştirme gücü (ör. lambda parametresi) çok yüksek ayarlanırsa, modeli aşırı basitleştirerek underfitting'e yol açabilir. Düzenlileştirme hakkında daha fazla bilgi için Makine Öğreniminde Overfitting'i Önlemeye Doğru: Düzenlileştirme yazımıza bakın.

Düşük kaliteli veya yetersiz veri

  • Yeterli veri olmaması: Eğitim veri seti çok küçükse, model temel kalıpları etkili şekilde öğrenmek için yeterli örneğe sahip olmayabilir.
  • Yüksek gürültü: Veri çok gürültülüyse, özellikle basit bir model sinyali gürültüden ayırmakta zorlanabilir.
  • Eksik değerler: Önemli miktarda eksik veri, özellikle uygun şekilde ele alınmadıysa modelin öğrenme yeteneğini engelleyebilir. Bununla başa çıkma teknikleri için R'de Atama (Imputation) ile Eksik Verileri Ele Alma kursuna bakın.

Tespit yöntemleri

Modelinizin underfitting yaşadığını nasıl anlarsınız? İşte yaygın tanı teknikleri:

Performans metriklerini analiz etme 

En doğrudan gösterge, hem eğitim hem de doğrulama/test setinde zayıf performanstır. Modeliniz, üzerinde eğitildiği veride yüksek hata (veya düşük doğruluk, düşük R-kare vb.) elde ediyorsa, kalıpları etkili şekilde öğrenemediğine dair güçlü bir işarettir. Overfitting'in aksine, orada eğitim performansı mükemmelken test performansı kötüdür; underfitting'te performans genel olarak düşüktür.

Öğrenme eğrileri

Modelin eğitim ve doğrulama setlerindeki performansını (ör. hata veya doğruluk) eğitim süresi veya veri kümesi boyutunun bir fonksiyonu olarak çizmek oldukça öğreticidir. Underfitting yaşayan bir model için öğrenme eğrileri tipik olarak şunları gösterir:

  • Erken plato yapan yüksek eğitim hatası.
  • Eğitim hatasına yakın ve yine plato yapan yüksek doğrulama hatası.
  • Her iki eğri de yüksek hata seviyesinde yakınsar; bu da daha fazla veri veya eğitimle bile modelin anlamlı ölçüde iyileşmediğini gösterir.

Öznitelik analizi

Kullandığınız öznitelikleri gözden geçirin. İlgili mi? Yakalamadığınız etkileşimler var mı? Sayısal öznitelikler ölçeklendi mi? Kategorik öznitelikler uygun şekilde kodlandı mı? 

Bazen öznitelik mühendisliğini yeniden ele almak, modelin neden zorlandığını ortaya çıkarabilir. Temel kavramlar R ile Makine Öğrenimi Temelleri eğitim yolunda ele alınır. İstatistiksel ilişkiler hakkında daha derin içgörüler için R'de İstatistiksel Çıkarım gibi kaynakları değerlendirin.

Karşılaştırmalı modelleme

Aynı veride daha karmaşık bir model (ör. ilk başta doğrusal regresyon kullandıysanız bir karar ağacı veya gradyan artırma makinesi) eğitin. Daha karmaşık model, eğitim ve doğrulama setlerinde ilk modelinizi anlamlı ölçüde geride bırakıyorsa, orijinal modeliniz muhtemelen yetersiz karmaşıklık nedeniyle underfitting yaşıyordur. 

Bu tür karşılaştırmaları, Makine Öğrenimi Deneyleri: Weights & Biases'e Giriş yazımızda ele alınan araçlarla takip edebilirsiniz.

Bu nedenleri ve tespit yöntemlerini anlayarak, underfitting yaşayan bir modeli etkili şekilde teşhis edip performansını iyileştirmek için adımlar atabilirsiniz.

Underfitting'i Azaltma Stratejileri ve En İyi Uygulamalar

Underfitting'i belirledikten sonra sıradaki adım, underfitting'in nasıl düzeltileceğini bilmektir. Neyse ki, modelinizin verideki temel kalıpları öğrenme yeteneğini artırmaya yardımcı olabilecek birkaç etkili strateji var. Bazılarına bakalım:

Model karmaşıklığını artırma

Modeliniz fazla basitse (yüksek bias), onu daha karmaşık hale getirmek çoğu zaman underfitting'i çözer. Bunu şu yollarla yapabiliriz:

Algoritma seçimi

Daha güçlü bir modele geçin. Doğrusal regresyon underfitting yapıyorsa, polinom regresyon, karar ağaçları, rastgele ormanlar, gradyan artırma makineleri (ör. XGBoost veya LightGBM) ya da doğrusal olmayan çekirdeklerle SVM'leri deneyin. Bu modeller, karmaşık ilişkileri yakalamak için doğası gereği daha fazla kapasiteye sahiptir.

Polinom öznitelik genişletme

Regresyon problemlerinde mevcut sayısal özniteliklerinizden polinom öznitelikler oluşturabilirsiniz. Bu, doğrusal modellerin daha karmaşık, eğrisel ilişkileri uydurmasına olanak tanır. Örneğin, x özniteliğiniz varsa, x2, x3 vb. yeni öznitelikler ekleyebilirsiniz. Scikit-learn bunun için PolynomialFeatures sağlar.

Hiperparametre ayarlama

Birçok karmaşık modelin karmaşıklıklarını kontrol eden hiperparametreleri vardır (ör. bir karar ağacının derinliği, bir sinir ağı katmanındaki nöron sayısı, SVM'lerde C parametresi). Bu hiperparametreleri daha fazla karmaşıklığa izin verecek şekilde ayarlamak, bias'ı azaltabilir. 

Izgara Arama (Grid Search) veya Rastgele Arama (Randomized Search) gibi teknikler burada çok önemlidir. Daha fazla bilgi için Python'da Hiperparametre Ayarlama veya R'de Hiperparametre Ayarlama gibi kurslara göz atın. Ayrıca Makine Öğrenimi Modellerinde Hiperparametre Optimizasyonu eğitimimize de bakın.

Öznitelik mühendisliği ve veri zenginleştirme

Bazen sorun modelde değil, veri temsilindedir. Öznitelikleri iyileştirmek önemli ölçüde yardımcı olabilir. Bunu şu yollarla yapabiliriz:

Alana özgü öznitelik oluşturma

Problem alanına ilişkin bilginizi kullanarak daha bilgilendirici olabilecek yeni öznitelikler yaratın. Örneğin, konut fiyatı tahmininde 'yatak odası sayısı' ve 'banyo sayısı'nı 'toplam oda' özniteliğine dönüştürmek veya 'inşa yılı'ndan 'ev yaşı'nı hesaplamak.

Etkileşim öznitelikleri

Mevcut öznitelikler arasındaki etkileşimi temsil eden öznitelikler oluşturun (ör. iki özniteliği çarpmak). Bu, modellerin sinerjik etkileri yakalamasına yardımcı olabilir.

Veri zenginleştirme

Mümkünse veri setinizi harici veri kaynaklarıyla zenginleştirin. Örneğin, müşteri bilgilerine demografik veriler, satış tahminlerine hava durumu verileri eklemek.

Veri artırma (özellikle yapılandırılmamış veri için)

Görüntü veya metin verilerinde, görüntüleri döndürme/çevirme ya da metinde eş anlamlı kelime değiştirme gibi teknikler, eğitim setinin boyutunu ve çeşitliliğini yapay olarak artırabilir; bu da modelin daha sağlam kalıpları öğrenmesine yardımcı olabilir.

Düzenlileştirmeyi ayarlama

Underfitting, overfitting'i önlemek için kullanılan aşırı düzenlileştirmeden kaynaklanıyorsa, bunu azaltmanız gerekir. Düzenlileştirme parametresinin değerini düşürün (ör. Ridge/Lasso'da alpha, SVM'lerde C – SVM'lerde daha küçük C daha güçlü düzenlileştirme demektir; bu yüzden C'yi artırırsınız).

Dropout kullanıyorsanız, dropout oranını (eğitim sırasında düşürülen nöronların oranı) azaltın. Daha düşük oran, ağ kapasitesini daha fazla korur.

Doğru dengeyi bulmak çoğu zaman dikkatli ayarlama gerektirir; bu da hiperparametre optimizasyonunun önemini bir kez daha vurgular.

Topluluk (ensemble) yöntemleri

Topluluk yöntemleri, birden çok bireysel modelin (zayıf öğrenicilerin) tahminlerini birleştirerek daha güçlü ve daha sağlam bir nihai tahmin üretir. Çoğu zaman hem bias'ı hem de varyansı azaltmada çok etkilidirler. Bazı topluluk yöntemleri şunlardır:

  • Bagging (ör. Random Forests): Verinin farklı önyükleme örnekleri üzerinde birden fazla modeli (ör. karar ağaçları) bağımsız olarak eğitir ve tahminlerini ortalar. Esasen varyansı azaltır ancak temel öğreniciler biraz önyargılıysa da yardımcı olabilir. Daha fazla bilgi için Bagging eğitimimize göz atın.
  • Boosting (ör. AdaBoost, Gradient Boosting): Modelleri ardışık olarak eğitir; her yeni model, öncekilerin hatalarını düzeltmeye odaklanır. Boosting, bias'ı azaltmada ve zayıf öğrenicileri güçlü hale getirmede özellikle etkilidir; bu da onu underfitting'e karşı güçlü bir araç yapar. Daha fazla açıklama için Boosting rehberimiz var. 
  • Stacking: Birden çok farklı tipte modeli eğitir ve sonra bunların tahminlerini en iyi nasıl birleştireceğini öğrenmek için başka bir model (meta-öğrenici) kullanır.

Bu stratejileri, çoğu zaman birlikte uygulayarak, underfitting'i etkili şekilde ele alabilir ve verinizin karmaşıklıklarını daha iyi yakalayan modeller kurabilirsiniz.

Pratik Uygulamalar ve Vaka Çalışmaları

Underfitting'i veri kümeleri ve kodla birlikte görmek kavramı önemli ölçüde netleştirir. Underfitting yaşayan bir modelin nasıl davrandığını ve performansının nasıl iyileştirilebileceğini göstermek için pratik örneklere bakalım.

Doğrusal regresyonda underfitting örneği

Underfitting için yaygın bir senaryo, doğrusal olmayan bir ilişkiyi açıklamak için basit bir doğrusal modelin kullanılmasıdır. Bunu, karesel bir deseni izleyen verilere doğrusal regresyon modeli uydurmaya çalışarak göstereceğiz.

Sentetik veri üreteceğiz; hedef değişken y ile bir öznitelik X arasında karesel bir ilişki olacak. Önce basit bir doğrusal regresyon modeli uyduracağız. Zayıf performansını (yüksek Ortalama Kare Hatası - MSE) gözlemleyecek ve verinin eğrisini nasıl yakalayamadığını görselleştireceğiz. 

Ardından, öznitelikleri bir polinom terim ekleyerek genişletecek ve bir polinom regresyon modeli uyduracağız. Bu, model karmaşıklığını artırmanın bias'ı nasıl azaltabileceğini ve modelin doğruluğunu önemli ölçüde iyileştirebileceğini gösterecek.

Gerekli kütüphaneleri şu şekilde içe aktararak başlayalım:

# Import necessary libraries
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.metrics import mean_squared_error

Sentetik doğrusal olmayan veri üretelim. Karesel ilişkiye sahip veri oluşturacağız: y = 0.5*X^2 + X + 2 + gürültü.

np.random.seed(42) # for reproducibility
num_samples = 100
X = np.sort(10 * np.random.rand(num_samples, 1) - 5, axis=0) # Feature X (sorted for plotting)
y_true = 0.5 * X**2 + X + 2 # True quadratic relationship
y = y_true + np.random.randn(num_samples, 1) * 5 # Add some noise to make it realistic

Şimdi basit bir doğrusal regresyon modeli (Underfitting Modeli) uyduralım:

linear_model = LinearRegression()
linear_model.fit(X, y)
y_pred_linear = linear_model.predict(X)
mse_linear = mean_squared_error(y, y_pred_linear)

print(f"--- Simple Linear Regression (Potential Underfitting Model) ---")
print(f"Mean Squared Error (MSE): {mse_linear:.2f}")
print(f"Model Coefficients (slope): {linear_model.coef_[0][0]:.2f}")
print(f"Model Intercept: {linear_model.intercept_[0]:.2f}")

Çıktı:

--- Simple Linear Regression (Potential Underfitting Model) ---

Mean Squared Error (MSE): 34.03

Model Coefficients (slope): 1.00

Model Intercept: 6.42

Şimdi bir polinom regresyon modeli (İyileştirilmiş Model) uyduracağız. Bunu yapmak için polinom öznitelikler (derece 2) oluşturup bu özniteliklere doğrusal bir model uyduracağız. PolynomialFeatures adımı yeni öznitelikler ekler. LinearRegression adımı her biri için katsayılar barındırır.

Derece 2 için X ve X^2 için katsayılar bekleriz. Bir ardışık düzen (pipeline) bu süreci daha temiz hale getirir. Ardışık düzenin named_steps özniteliği, aşağıda gösterildiği gibi adımlara ayrı ayrı erişmeye olanak tanır:

polynomial_model = make_pipeline(PolynomialFeatures(degree=2, include_bias=False), LinearRegression())
polynomial_model.fit(X, y)
y_pred_poly = polynomial_model.predict(X)
mse_poly = mean_squared_error(y, y_pred_poly)

print(f"\n--- Polynomial Regression (Degree 2) ---")
print(f"Mean Squared Error (MSE): {mse_poly:.2f}")
poly_reg_coeffs = polynomial_model.named_steps['linearregression'].coef_[0]
poly_reg_intercept = polynomial_model.named_steps['linearregression'].intercept_[0]
print(f"Model Coefficients (for X, X^2): {poly_reg_coeffs[0]:.2f}, {poly_reg_coeffs[1]:.2f}")
print(f"Model Intercept: {poly_reg_intercept:.2f}")

Çıktı:

--- Polynomial Regression (Degree 2) ---

Mean Squared Error (MSE): 20.48

Model Coefficients (for X, X^2): 1.13, 0.50

Model Intercept: 2.04

Şimdi model uyumunu aşağıda gösterildiği gibi görselleştirelim:

# Visualization
plt.figure(figsize=(10, 4))
plt.scatter(X, y, s=30, label="Actual Data Points", alpha=0.7, edgecolors='k')
plt.plot(X, y_pred_linear, color='red', linewidth=2, label=f'Linear Fit (Underfitting)\nMSE: {mse_linear:.2f}')
plt.plot(X, y_pred_poly, color='green', linewidth=2, label=f'Polynomial Fit (Degree 2)\nMSE: {mse_poly:.2f}')
plt.title('Demonstrating Underfitting with Linear vs. Polynomial Regression', fontsize=16)
plt.xlabel('Feature X', fontsize=14)
plt.ylabel('Target y', fontsize=14)
plt.legend(fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.show()

Çıktı:

Grafik, basit doğrusal modelin underfitting yaptığını görsel olarak doğrular. Verideki eğriyi yakalayamaz. X^2 terimini içeren polinom regresyon modeli ise daha düşük MSE ile çok daha iyi bir uyum sağlar.

Bu, öznitelikleri genişletmenin (model karmaşıklığını artırmanın) doğrusal olmayan ilişkilerde bias'ı azaltıp doğruluğu nasıl iyileştirebileceğini gösterir. Sırada bir tıbbi tanı vaka çalışması var.

Tıbbi tanı vaka çalışması

scikit-learn içinde bulunan, iyi bilinen Breast Cancer Wisconsin (Diagnostic) veri setini kullanarak bir tıbbi tanı senaryosu simüle edelim.

Önce çok sınırlı bir öznitelik alt kümesiyle bir sınıflandırma modeli kurmayı deneyeceğiz; bu underfitting'e yol açabilir. Ardından daha kapsamlı bir öznitelik kümesi ve muhtemelen daha karmaşık bir algoritma kullanarak iyileşmeyi göstereceğiz.

Gerekli kütüphaneleri şu şekilde içe aktararak başlayalım:

# Import necessary libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, roc_auc_score, confusion_matrix, ConfusionMatrixDisplay

Şimdi veriyi yükleyip hazırlayalım:

cancer = load_breast_cancer()
X = pd.DataFrame(cancer.data, columns=cancer.feature_names)
y = cancer.target # 0 for malignant, 1 for benign

Gösterim amacıyla, underfitting senaryosu için çok sınırlı bir öznitelik alt kümesi seçelim. Bunlar tek başına en kestirici olanlar olmayabilir:

features_limited = ['mean texture', 'mean symmetry']
X_limited = X[features_limited]

İyileştirilmiş model için daha büyük bir alt küme (veya tüm öznitelikler) kullanacağız. Daha kapsamlı olması için ilk 10 özniteliği seçelim:

features_comprehensive = cancer.feature_names[:10]
X_comprehensive = X[features_comprehensive]

Veriyi bölelim. Açıklık için bunu her öznitelik seti için ayrı yapacağız:

X_train_lim, X_test_lim, y_train, y_test = train_test_split(X_limited, y, test_size=0.3, random_state=42, stratify=y)
X_train_comp, X_test_comp, _, _ = train_test_split(X_comprehensive, y, test_size=0.3, random_state=42, stratify=y) # y_train and y_test are the same

Öznitelikleri ölçekleyelim; bu, lojistik regresyon ve birçok algoritma için önemlidir:

scaler_lim = StandardScaler().fit(X_train_lim)
X_train_lim_scaled = scaler_lim.transform(X_train_lim)
X_test_lim_scaled = scaler_lim.transform(X_test_lim)

scaler_comp = StandardScaler().fit(X_train_comp)
X_train_comp_scaled = scaler_comp.transform(X_train_comp)
X_test_comp_scaled = scaler_comp.transform(X_test_comp)

Şimdi sınırlı özniteliklerle bir lojistik regresyon uyduralım:

print("Scenario 1: Logistic Regression (Limited Features - Potential Underfitting)")
log_reg_limited = LogisticRegression(random_state=42, solver='liblinear') # liblinear is good for small datasets
log_reg_limited.fit(X_train_lim_scaled, y_train)
y_pred_lim = log_reg_limited.predict(X_test_lim_scaled)
y_proba_lim = log_reg_limited.predict_proba(X_test_lim_scaled)[:, 1]

acc_lim = accuracy_score(y_test, y_pred_lim)
auc_lim = roc_auc_score(y_test, y_proba_lim)
print(f"Features used: {features_limited}")
print(f"Accuracy: {acc_lim:.4f}")
print(f"AUC: {auc_lim:.4f}")

Çıktı:

Scenario 1: Logistic Regression (Limited Features - Potential Underfitting)

Features used: ['mean texture', 'mean symmetry']

Accuracy: 0.7544

AUC: 0.8151

Bir azaltma stratejisi uygulayalım. Daha fazla öznitelikle bir lojistik regresyon modeli uyduracağız:

print("Scenario 2: Logistic Regression (Comprehensive Features)")
log_reg_comp = LogisticRegression(random_state=42, solver='liblinear')
log_reg_comp.fit(X_train_comp_scaled, y_train)
y_pred_comp_lr = log_reg_comp.predict(X_test_comp_scaled)
y_proba_comp_lr = log_reg_comp.predict_proba(X_test_comp_scaled)[:, 1]

acc_comp_lr = accuracy_score(y_test, y_pred_comp_lr)
auc_comp_lr = roc_auc_score(y_test, y_proba_comp_lr)
print(f"Features used: First 10 features") # For brevity
print(f"Accuracy: {acc_comp_lr:.4f}")
print(f"AUC: {auc_comp_lr:.4f}")

Çıktı:

Scenario 2: Logistic Regression (Comprehensive Features)

Features used: First 10 features

Accuracy: 0.9181

AUC: 0.9831

Şimdi daha karmaşık bir model olan Random Forest'ı daha fazla öznitelikle uyduralım:

print("Scenario 3: Random Forest (Comprehensive Features)")
rf_comp = RandomForestClassifier(random_state=42, n_estimators=100) # n_estimators is a key hyperparameter
rf_comp.fit(X_train_comp_scaled, y_train) # RF can also benefit from scaled data, though less sensitive
y_pred_comp_rf = rf_comp.predict(X_test_comp_scaled)
y_proba_comp_rf = rf_comp.predict_proba(X_test_comp_scaled)[:, 1]

acc_comp_rf = accuracy_score(y_test, y_pred_comp_rf)
auc_comp_rf = roc_auc_score(y_test, y_proba_comp_rf)
print(f"Features used: First 10 features")
print(f"Accuracy: {acc_comp_rf:.4f}")
print(f"AUC: {auc_comp_rf:.4f}")

Çıktı:

Scenario 3: Random Forest (Comprehensive Features)

Features used: First 10 features

Accuracy: 0.9415

AUC: 0.9878

Her durum için karmaşıklık matrisini çizip karşılaştıralım:

fig, axes = plt.subplots(1, 3, figsize=(20, 5))
fig.suptitle('Comparison of Model Performance (Confusion Matrices on Test Set)', fontsize=16)

# Model 1: Logistic Regression (Limited Features)
cm_lim = confusion_matrix(y_test, y_pred_lim)
disp_lim = ConfusionMatrixDisplay(confusion_matrix=cm_lim, display_labels=cancer.target_names)
disp_lim.plot(ax=axes[0], cmap='Blues')
axes[0].set_title(f'LogReg (Limited Features)\nAcc: {acc_lim:.2f}, AUC: {auc_lim:.2f}')

# Model 2: Logistic Regression (Comprehensive Features)
cm_comp_lr = confusion_matrix(y_test, y_pred_comp_lr)
disp_comp_lr = ConfusionMatrixDisplay(confusion_matrix=cm_comp_lr, display_labels=cancer.target_names)
disp_comp_lr.plot(ax=axes[1], cmap='Greens')
axes[1].set_title(f'LogReg (Comprehensive Features)\nAcc: {acc_comp_lr:.2f}, AUC: {auc_comp_lr:.2f}')

# Model 3: Random Forest (Comprehensive Features)
cm_comp_rf = confusion_matrix(y_test, y_pred_comp_rf)
disp_comp_rf = ConfusionMatrixDisplay(confusion_matrix=cm_comp_rf, display_labels=cancer.target_names)
disp_comp_rf.plot(ax=axes[2], cmap='Oranges')
axes[2].set_title(f'Random Forest (Comprehensive Features)\nAcc: {acc_comp_rf:.2f}, AUC: {auc_comp_rf:.2f}')

plt.tight_layout(rect=[0, 0, 1, 0.96]) # Adjust layout to make space for suptitle
plt.show()

Çıktı:

Bu vaka çalışmasında, yalnızca iki öznitelikle eğitilen bir LogisticRegression modeli (Senaryo 1), yetersiz bilgi nedeniyle underfitting yapması beklenir; bu da düşük doğruluk ve AUC ile sonuçlanır. 

Aynı algoritmaya daha kapsamlı bir öznitelik kümesi verildiğinde (Senaryo 2) performans tipik olarak iyileşir; çünkü öğrenilecek daha fazla veri vardır ve bias azalır.

Daha kapsamlı öznitelik setiyle RandomForestClassifier gibi daha karmaşık bir algoritma kullanıldığında (Senaryo 3) genellikle daha fazla iyileşme görülür; çünkü doğrusal olmayanlıkları ve öznitelik etkileşimlerini daha etkili biçimde yakalayabilir, böylece bias'ı daha da azaltıp veriye uyumu artırır.

İleri Konular ve Gelecek Yönelimler

Temelleri ele almış olsak da makine öğrenimi alanı sürekli gelişiyor. Underfitting'in daha ileri alanlarla nasıl ilişkilendiğine kısaca bakalım.

Derin öğrenmenin rolü

Derin öğrenme modelleri, özellikle çok katmanlı derin sinir ağları, yüksek kapasiteyle bilinir; teorik olarak çok karmaşık fonksiyonları yaklaştırabilirler.

Doğaları gereği karmaşık olduklarından, yeterli veriyle düzgün eğitildiklerinde derin öğrenme modelleri genellikle basit modellere kıyasla underfitting'e daha az yatkındır. Yapıları, ham veriden (görüntülerde pikseller veya metinde kelimeler gibi) karmaşık öznitelik temsillerini otomatik olarak öğrenmelerine olanak tanır.

Ancak derin öğrenme, underfitting'e benzer sorunlara bağışık değildir. Ağ kötü tasarlanmışsa (ör. görev için yetersiz derinlik/genişlik), yeterince uzun eğitilmemişse veya uygunsuz aktivasyon fonksiyonları/optimizasyon algoritmaları kullanılıyorsa, yine yakınsamada başarısız olabilir ve yüksek eğitim hatası sergileyebilir.

Artırımlı bağlantılar (ResNet'ler) ve normalizasyon teknikleri (Batch Normalization) gibi mimari yenilikler, çok derin ağların etkin şekilde eğitilmesine yardımcı olur; sönümlenen/patlayan gradyan sorunlarını hafifletir ve yakınsamada underfitting'i andıran problemlerden kaçınıp tam kapasitelerine ulaşmalarını sağlar.

Otomatik makine öğrenimi (AutoML)

Underfitting'i ve overfitting'i önlemek için doğru modeli, öznitelikleri ve hiperparametreleri bulmak zaman alabilir. AutoML bu süreci otomatikleştirmeyi amaçlar.

AutoML çerçeveleri, farklı model türlerini (doğrusal modellerden karmaşık topluluklara ve sinir ağlarına kadar) otomatik olarak keşfedebilir, öznitelik mühendisliği ve seçimi yapabilir ve hiperparametreleri optimize edebilir. Geniş bir olasılık alanını sistematik olarak tarayarak, AutoML veriyi underfitting yapmayacak yeterli karmaşıklığa sahip model yapılandırmalarını belirleyebilir.

Nöral Mimari Arama (NAS) gibi yöntemler ağ mimarilerini otomatik olarak tasarlar; Bayesçi Optimizasyon gibi gelişmiş hiperparametre optimizasyon teknikleri ise iyi ayarları verimli şekilde bulur. Bu araçlar, iyi uyan bir modeli bulma sürecini önemli ölçüde hızlandırabilir; underfitting yaşayan bir modeli teşhis ve düzeltme için gereken manuel çabayı azaltır.

Sonuç

Underfitting ve overfitting ikilemini anlamak, başarılı makine öğrenimi için temeldir. Underfitting'in, modelin verideki temel eğilimleri yakalamak için fazla basit (yüksek bias) olduğu durumlarda ortaya çıktığını; hem eğitim hem de görülmemiş verilerde zayıf performansa yol açtığını gördük. Başlıca nedenler, yetersiz model karmaşıklığı, zayıf öznitelikler, yetersiz eğitim ve aşırı düzenlileştirmedir.

Underfitting'i teşhis etmek; performans metriklerini incelemeyi, öğrenme eğrileri çizmeyi ve çoğu zaman kodla desteklenen model karşılaştırmaları yapmayı içerir. Neyse ki underfitting'i düzeltmek için birkaç stratejiye sahibiz: model karmaşıklığını artırmak (daha iyi algoritmalar seçmek, öznitelik genişletme, hiperparametre ayarlama), öznitelikleri iyileştirmek (öznitelik mühendisliği, veri zenginleştirme), düzenlileştirmeyi ayarlamak ve güçlü topluluk yöntemlerinden yararlanmak; bunların hepsi kod örneklerimizde gösterilmiştir.

Bu teknikleri ve daha fazlasını uygulamalı örneklerle öğrenmek için Python ile Makine Öğrenimi Temelleri beceri yolumuza göz atın.

Underfitting SSS

Underfitting yaşayan bir model nedir?

Underfitting yaşayan bir model, verideki temel kalıpları yakalamak için fazla basittir; bu da hem eğitimde hem de yeni verilerde zayıf performansa yol açar.

Underfitting yaşayan bir modelin başlıca özelliği nedir?

Ana özellik, modelin veriye aşırı basit varsayımlar getirdiğini ifade eden yüksek bias'tır.

Modelimin underfitting yaptığını nasıl anlarım?

Modeliniz hem eğitim hem de test verinizde yüksek hata gösteriyorsa, büyük olasılıkla underfitting vardır. Öğrenme eğrileri de her iki hatanın yüksek ve plato yaptığını gösterecektir.

Underfitting'in yaygın bir nedeni nedir?

Veri için yeterince karmaşık olmayan bir model kullanmak (ör. doğrusal olmayan veri için doğrusal model) veya yetersiz/kötü özniteliklere sahip olmak yaygın nedenlerdir.

Underfitting yaşayan bir modeli nasıl düzeltebilirim?

Model karmaşıklığını artırmayı, daha iyi öznitelikler tasarlamayı, daha uzun süre eğitmeyi veya aşırı düzenlileştirmeyi azaltmayı deneyebilirsiniz.

Yazar

Rajesh Kumar

Ben bir veri bilimi içerik yazarıyım. YZ/ML/DS konuları etrafında içerik üretmeyi seviyorum. Ayrıca yeni YZ araçlarını keşfediyor ve onlar hakkında yazıyorum.

Konular

İlgili