Makine Öğrenimi Felsefesi — 2

Volkan Yurtseven
5 min readOct 1, 2020
Photo by Tim Mossholder on Unsplash

Bu bölümde makinenin öğrenim sürecine ve öğrenirken yaşadığı problemere değineceğiz.

Öğrenme(ve öğretme) denen şey ne?

Öğrenme, kısaca matematiksel bir denklem oluşturmaktan başka birşey değildir. Yani, çıktımız inputların bir fonksiyonudur. Bu nihai fonksiyonu elde ederken aslında bir amaç fonksiyonumuz vardır, bunu minimize(loss function ise) veya maksimize(utility function ise) etmeye çalışırız. Bu konuya biraz aşağıda değineceğiz.

Peki tam olarak süreç nasıl işliyor? ML tanımında bahsettiğimiz, “açıkça programlanmadan” ifadesi ne anlama geliyor, en nihayetinde öğrenen şey ne, öğrendiği şey ne ve öğrendiği şeyi öğrenmesi ne anlamalı geliyor?

Algoritmaların detayına bakmadan önce burada işin teoriğini anlamanız, birçok işi ezbere yapmamanız adına önemli. Çoğu eğitim materyalinin işin felsefesini anlatmadığını düşündüğüm için buraya ağırlık vermek istiyorum. Tabi burada daha çok supervised türdeki modellerdeki mantığı anlatacağız.

Terminoloji aşinalığı için ön bilgilendirme

Supervised Learning’de inputlar için kullanılan ifadeler şunlardır: Feature, attribute, (independent) variable, değişken, parametre, input, X, predictor, estimator. Bu arada satırdaki veriler için kullanılan ifadeler de instance, sample, observation ve record’dur.

Tahminlenecek değerler için kullanılan ifadeler: y, output, bağımlı değişken(dependent variable), label, class.

Eğitim(Train) ve Test verisi

Makine öğrenmesinde işin püf noktası, elinizdeki veriyi eğitim(train) ve test seti olmak üzere ikiye ayırmaktır.

Eğitim ve test setini en başta ayırmak ve ayırdıktan sonra test setini tamamen bi kenara koymak çok önemli. Onun üzerinde son ana kadar hiçbir iş yapmamalıyız. Sonra modelimizi eğitim setine göre kurgularız. Bu şu demek: Modelimize diyoruz ki, “Veri setindeki değişkenleri(featureları) öyle bir model üretmekte kullan ki, tahmin etmek istediğimiz değerleri en iyi şekilde tahmin etsin.” (Aslında burda bir de cross-validation aşaması vardır, basitlik olması adına şuan es geçiyorum). Ve sonra da modelimize daha önce hiç görmediği, ve yeni dataymış gibi algılayacağı test setinin X değerlerini sunarız, ve y değerlerine ait tahminleri(y_pred) elde ederiz. Test setinin gerçek y değerleri(y_test) de elimizdedir. İşte bu iki y değerini karşılaştırarak da modelimizin ne kadar başarılı olduğunu değerlendiririz.(Ör:1000 müşteri bilgisi var elimizde, 800ü ile eğitim yaptık, yani 800 müşterinin çeşitli özelliklerine bakarak, hangileri bankayı bırakmış hangileri bırakmamış, bunlar arasında bi bağıntı kurduk. Sonra 200 müşterinin verisini getirdik, bunları tahminle dedik(biz yine bunların hangileri bankayı terketmiş hangileri terketmemiş biliyoruz), sonra tahminlerle gerçek değerleri karşılaştırdık ve modelimizin başarısını ölçmüş olduk.)

Öğrenme problemleri

(İleri seviye bilgiler de içerir, yeni başlayanlar genel bilgi sahibi olması adına okusun, seviyeniz ilerledikçe tekrar gelip bakmanızda fayda var)

Fitting problemleri(Underfitting ve Overfitting)

Bias-Variance trade-off

Öğrenme problemlerine geçmeden önce bunlarla eşanlama gelen, daha doğrusu o kavramların açıklayıcısı olan öncü kavramlara bakalım.

Bu konuyu Hands-on Machine Learning kitabındaki tanımlara bakarak açıklayalım, gayet güzel açıklanmış:

Bias/Yanlılık: Yanlılık, modelin ne kadar yanlış olduğunu ölçer. Yani model genelleştirme yapmada başarısız olmuştur, geneli temsil eden bir model oluşmamıştır. Genelleştirme hatasının bu parçası, yanlış(yanlı) varsayımlara dayanır. Örneğin, veri kuadratik (ikinci dereceden polinom) iken verinin lineer olduğunu varsaymak gibi. Yanlılık, modelimizin problemin çözümünü içermediğini gösterir. Modelimizin zayıf kaldığı bu duruma eksik öğrenme (underfitting) denir. Yüksek yanlılığa sahip bir modelin, eğitim verimizi eksik öğrenme olasılığı daha fazladır. Yanlı olunan şey, doğru model yerine yanlış modelin yanında olmaktır.

Varyans: Varyans, modelin tahmin ettiği verilerin, gerçek verilerin etrafında nasıl (ne kadar) saçıldığını ölçer. Genelleştirme hatasının bu parçasına, modelin eğitim verisindeki küçük varyasyonlara aşırı duyarlılığı sebep olur. Eğer varyans yüksek ise, modelimiz fazla geneldir; buna da aşırı öğrenme (overfitting) denir.

Burda yüksek varyanstan kasıt, eğitim setinin tahminleriyle gerçek değerler arasındaki farkların yani eğitim seti hatalarının varyansı değil, zira orada varyans 0 çıkmıştır(accuracy oranı %100’dür). Kastedilen, test setinin tahminleme hatası ile eğitim setinin tahminleme hatası arasındaki farklılıktır.

Örneğin eğitim setinde %1 ve test setinde %11 hata yapıyor olsaydı: %11 — %1 = %10 yüksek varyans hatası var derdik.

Amacımız, bias ve varyans değerlerinin ikisini de düşük tutmak. Ama biri düşerken diğeri artar, o yüzden optimumu bulmaya çalışmalıyız.

İndirgenemez Hata: Hatanın bu kısmı, verideki gürültülere bağlıdır. Bu hatayı azaltmanın tek yolu, veriyi temizlemektir (outlierları silmek, veri kaynaklarını düzeltmek vb.)

Bir modelin karmaşıklığını artırmak, varyansını artırır ve yanlılığı azaltır. Aksine, bir modelin karmaşıklığını azaltmak, yanlılığı artırır ve varyansı azaltır (Buna Yanlılık/Varyans İkilemi(tradeoff) adı verilir). Fakat, her iki model de aynı hataya sahip olabilir.

Kısaca, hatanın küçük olabilmesi için, uygun varsayımlarla yanlılığı küçük tutmalı, ve yeterince büyük bir veri seti kullanıp modelin varyansını azaltmalıyız.

Overfitting & Underfitting ve sebepleri

Modelimizi eğittikten sonra onu değerlendirmemiz gerekiyor, istediğimiz düzeyde sonuç üretiyor mu diye. İşte bu aşamada bazen görürüz ki modelimiz, ona verdiğimiz eğitim setini ezberliyordur(Overfitting durumu). Yani, modeliniz veriyi en ince ayrıntısına kadar öğrenmiştir ama genelleştirme yapamamıştır. Yani altta yatan gerçek fonksiyonu bulamamıştır. Bu şu anlama gelir: Modelinize yeni bir data verildiğinde çok başarısız sonuçlar üretir. Tıpkı bir sınava hazırlanan öğrencinin sadece belli konuları ezberleyip sınava girmesi ama sınavda başka soruların çıkması gibi.

Bunun olmasını sebebi, modeliniz gürültülü veriyi öğrenmeye çalışıyordur(datayı doğru temsil etmeyen değerler, genelde uç değerlerdir ama uç değer olmak zorunda değil, normalde beklenenden çok farklı bir değer, belki hata, belki gerçekten öyle)

Başka bir sıkıntı da modelimiz yetersiz öğrenebilir(Underfitting).Yeni data geldiğinde yine çok isabetsiz tahminlerde bulunur.

İki durumda da isabetsiz tahminler sözkonusu. Aslında overfittingde, model eğitim datasını çok iyi tahminler ama yeni data geldiğinde(veya test datasında) bunlardaki başarısı çok düşük olur, çünkü gürültülü veriyi çok fazla dikkate almış ve buna odaklanmıştır. Underfittingde ise eğitim datasını bile kötü tahminler, zira doğru ilişkiyi kuramamıştır.

Overifttingede, gerekli özellikler öğrenilmekle kalmıyor, aynı zamanda gereksiz(kazara oluşan) detaylar da öğrenilmiş oluyor.

Konuyla ilgili olarak şu sayfadaki gönderiye de bakmanızı tavsiye ederim. Güzel açıklamlar bulunuyor. Tabiki sonra başka kaynaklara da bakmayı unutmayın.

Sorun olduğunu nasıl anlarız?

Peki ne olduğunda, yani aslında nasıl overfitting ve underfitting olduğnu anlarız. Aslında yukarıda bahsettik ancak burda yine de tekrar etmekte fayda var.

Eğitim setindeki başarı yüksek, test setinde düşükse overfit ettiğini anlarız. Ve genelde overfit ettiğinde eğitim seti başarısı %100 çıkar, ama tabi bu demek değildir ki kesin overfitting durumu var. Yine de test ile kıyaslamalıyız.

Train setini modeli oluşturmak için kullandık ancak gördüğünüz gibi tahminleme için de kullanabiliriz. İşte bu tahminle, test setinin tahminlerini kıyaslayarak overfitting var mı diye bakıyoruz. Ancak bunun daha iyi bir yolu var(k-fold cross validation), bunu bir sonraki yazımda anlatacağım.

Undefittingde ise, eğitim setinin başarısı çok düşüktür. Yani yüksek bias vardır, modelimiz X’lerle y arasındaki gerçek ilişkiyi bulamamıştır.

Çözüm

Her iki durumda da farklı çözüm seçenekleri vardır, uygun olan değerlendirilir. Bunu da sonraki yazımca bulacağız.

--

--

Volkan Yurtseven

Once self-taught-Data Science Enthusiast,now graduate one