Başaracaksın: Google Machine Learning Crash Course Dersleri 3 - Generalization ve Train – Test Split

Herkese merhabalar,

Bugün yine yeniden sizlerle birlikteyiz. Şahsen benim için hava hoş, umarım sizin için de öyledir 🙂

Serimizin bir önceki yazısında Learning Rate parametresinden bahsetmiştik. Bugünkü yazımızda Gradient Descent Çeşitlerini ve onunla ilgli bazı kavramları öğrenmemiz gerekiyordu ancak onunla ilgili bilgileri bu yazımda verdiğimi farkettim. Yine aynı serinin son yazısında Tensorflow kullanarak bir model eğitmiştik. İlgili yazıya giderseniz modelimizin hatalı olduğunu farkedebilirsiniz. Peki neden hatalı? Nasıl hatalı ve düzeltmek için ne yapabiliriz onlara bakacağız.

Ne duruyoruz öyleyse? Hadi başlayalım 🙂

GENERALIZATION

Modeldeki olası hata sebelerini incelemeden önce bahsetmek istediğim kavram Generalization. Generalization kabaca modelimizin daha önce görmediği verileri alarak sonucunda doğru tahmini gerçekleştirme becerisidir. Daha önce görmediği verilerden kastımız modelimizin eğitim setinde olmayan verilerdir.

MODELDEKİ HATANIN OLASI SEBEPLERİ

Yukarıdaki tanıma göre modelimizin generalization yeteneğinin çok yüksek olmasını bekleriz ancak her şey toz pembe olmayabiliyor. Bunu daha iyi anlayabilmemiz için aşağıdaki şekli inceleyelim.

Kaynak: https://developers.google.com/machine-learning/crash-course/generalization/peril-of-overfitting

Buradaki noktaların bir orman içerisindeki ağaçları temsil ettiğini düşünelim. Turuncu ağaçlar sağlıklı ağğaçları temsil ederken mavi ağaçlar hasta ağaçları temsil etmektedir.

Bu iki ağaç tipini en güzle biçimde ayıran ve tahmin edebilen bir model kurmak istediğimizi düşünelim. Öncelikle bu modelimiz bir sınıflandırma modeli olacaktır çünkü burada tahminlerimiz ağaç tipi (hasta-sağlıklı) olacaktır. Modeli oluşturduğumuzu ve ayrımı aşağıdaki şekilde yaptığını düşünelim.

Kaynak: https://developers.google.com/machine-learning/crash-course/generalization/peril-of-overfitting

Bu ayrım doğruya yakın bir ayrım oldu. Burada kafanızı ilk kurcalayan şey bu ayrımın lineer yani bir doğru ile ayrılmaması olabilir. Öncelikle her problemi lineerite ile çözemeyiz. Problem karmaşıklaştıkça modeliniz de karmaşıklaşmak zorundadır.

Peki model nasıl karmaşıklaşır?

1. Modelin içerisindeki feature sayısı modelin karmaşıklığını belirleyen faktörlerden biridir. Bir modelde ne kadar çok feature değeri var ise modelimiz o kadar çok karmaşıklaşır.

2. Eğer yapay sinir ağı eğitiyorsanız ne kadar çok katmanınız varsa modeliniz o kadar karmaşıklaşır. Bunun nedenine ilgili yazıda değineceğiz 🙂

3. Feature cross yaptığınızda da modeli karmaşıklaştırmış olursunuz. Buna da değineceğim 🙂

4. Modeliniz overfit olmuştur. Yani eğitim verisini öğrenmekten çok ezberlemiştir. Bunun detaylı açıklaması için önceki yazı serim olan Başarabilirsin serisini okuyabilirsiniz.

Önceki yazı serimin 4. ve son yazısındaki modelin hatalı olmasının sebebi modelin overfit olmasıydı. Peki modelimiz nasıl overfit oldu?

Öncelikle modelimiz tek bir verisetini aldı, çalıştı ve aynı verisetini kullanarak kendini optimize etmeye çalıştı. Buna gerçek hayattan örnek vermek gerekirse, bir lise son sınıf öğrencisi üniversite sınavına tek bir soru bankası ile hazırlanıyor, soru bankasından öğrendiklerini test edebilmek için tekrar aynı soru bankasını kullanıyor ve böyle öğrenci öğrenmekten çok ezberlemek oluyor. Üniversite sınavında sürekli aynı soru bankasını çözdüğü için soru bankasında olmayan soru tipleriyle karşılaşıyor ve sınavda başarısız oluyor. İşte buna overfit diyoruz 🙂

Peki bunun önüne nasıl geçebiliriz? Ondan kolay ne var 🙂

TRAIN – TEST SPLIT

Modelimizi tek bir verisetiyle eğitip optimizasyonunu yaparsak (gradient descent) bu optimizasyon modelin ezbeerleyeceği veriler için olur böylece biz tahminlerimizi çok efektif gerçekleştiremeyiz. Bunun için modelimizi ikiye bölebiliriz.

  1. Eğitim Kümesi: Bu küme içerisinde modelimizi eğitmek için kullanacağımız veriler bulunur.
  2. Test Kümesi: Bu küme içerisinde modelimizin kendisini test edip performansını arttırabilmesi için kullanacağımız veriler bulunur. Modelimiz kendini şu şekilde test eder: öğrendiği verileri kullanarak bir tahminde bulunur ve bu tahmin değerlerini test kümesindeki gerçek değerlerle karşılaştırır.

Hadi gelin ellerimizi aşağıdaki colab notebook’u ile kirletip sklearn ile verisetimizi iki alt kümeye bölelim ve bu kısmı daha iyi anlayalım 🙂

Colab Notebook için tıklayınız.

Eğer test veri seti yeterince büyükse ve aynı test setini sürekli kullanmıyorsanız test setindeki iyi performans modelin performansı hakkında iyi bir indikatördür diyebiliriz.

Aşağıdaki linkte train ve test kümelerinin ayrılması ile ilgili güzel bir egzersiz bulunmaktadır. Bu egzersizde verinizin eğitim kümesi büyüklüğünü, verideki gürültüyü* ve batch büyüklüğünü seçebiliyorsunuz. Buna göre modelimizin performansını gözlemleyebiliyorsunuz.

Link: https://developers.google.com/machine-learning/crash-course/training-and-test-sets/playground-exercise

*Verinizde çok fazla anlamsız bilgi var ise veriniz o kadar gürültülü demektir.

Generalization’a rehberlik ve etki eden 3 varsayım

1.(Independently and Identically): Burada verilerinizi random olarak almanız gerektiğinden bahsedebiliriz. Örneğin elinizde insanların yaş, boy, kilo, cinsiyet ve ülke bilgilerini içeren bir veriseti var. Burada ülke sizin labelınız, diğer alanlar ise featurelarınız olsun. Eğer verisetinizi eğitime sokarken random olarak almazsanız eğitim-test bölme işleminde eğitim verisinde sadece tek bir ülkeye ait veriler gelmiş olabilir. (Örneğin elinizde TR-US-FR ülkeleri olduğunu düşünün. Eğitim setinde sadece TR verileri olursa modelimiz FR ve US verilerini tahmin etmekte efektif çalışmayacaktır.)

2. (Stationary): Burada da verilerimizin dağıtımının sabit olduğundan bahsedebiliriz. Örneğin verisetinizde bir şemsiye şirketinin satış listesi olsun. Şemsiye satışları mevsimsel olarak farklılık göstereceğinden bu dağılım sabitliğini ihlal eder.

3. (Same Distribution):Burada ele aldığımız örneklerin aynı dağılımdan olması gerektiğinden bahsedebiliriz. Eğer test ve eğitim verilerimiz birbirinden farklı distributionlarda olursa test loss’umuzun fazla olur bu da generalization performansını kötü etkiler.

KAPANIŞ

Bu yazımızda modelimizin hatalı oluşmasına etki eden faktörleri, generalization konusunu ve hatayı önleyebilmek adına modelimizde train-test ayırmasını inceledik. Sorularınızın olması durumunda her zaman benimle iletişime geçebilirsiniz. Serinin devamı için takipte kalın 🙂

 

 

 

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.