Boosting Algoritmaları

XGBoost, GradientBoost, AdaBoost, CatBoost Algoritmalarının İncelenmesi

Herkese merhabalar bu yazımızda Boosting ailesinden XGBoost, GradientBoost, AdaBoost ve CatBoost algoritmalarını inceleyeceğiz. Boosting algoritmaları makine öğrenme modellerinde doğru tahminleri güçlendirmek için uygulanmaktadır. Diğer bir anlamıyla arttırma, yükseltme anlamına gelen Boosting, zayıf modelleri güçlendirme eğilimindedir. Peki temelde zayıf öğrenme modelini güçlü bir öğrenme modeli haline getirmek için kullanılıyorsa, zayıf öğrenme modellerini nasıl tespit edebiliriz ?

Burada zayıf öğrenme modelini tespit etmek için ML(machine learning) modellerinden farklı algoritmaları çalıştırarak zayıf olan kuralları tespit edebiliriz. İki değişkenin(feature) birbiriyle olan korelasyonu düşük ise tahmin oranı da düşüktür. Genellikle sınıflandırma problemlerinde bu tarz durumların iyi sonuç vermesi için Karar Ağacı algoritmalarını kullanmak akıllıca olabilir. Bizlerde bu yazımızda kökünde karar ağacı tabanlı algoritmalardan oluşan XGBoost, AdaBoost, GradientBoost ve CatBoost algoritmalarını anlatmak istedik. Bu algoritmaları güçlü kılan önemli faktörlerden biri, oluşturulan ağaç  yapısının bir sonraki ağacın bir önceki ağaçtan gelen hatayı en aza indirme  eğiliminde olmasıdır. Bu da algoritmanın zayıf modeli güçlü kural haline getirme hedefini gerçekleştirmektedir. 

Bu yazımızda sizlere Boosting(yükseltme) algoritmalarını anlatmaya odaklanacağız. Performanslarını, faydalarını, parametrelerini hatta arka planda nasıl çalıştıklarını özgün örnekler ile uygulamaya çalışacağız. Gelecek yazımızda bu algoritmaları Kaggle sayfası üzerinde bir veri kümesi ile uygulamaya odaklanacağız.

XGBoost

XGBoost olarak tanıdığımız, eXtreme Gradient Boosting açılımıyla, son dönemde uygulamalı makine öğrenimi ve Kaggle yarışmalarına hakim olan bir algoritmadır. Hız ve performans için tasarlanmış gradient yükseltme çerçevesi kullanan, karar ağacı tabanlı bir uygulamadır.

Şekil 1. Scikit-Learn Make Classification Veri Kümesi Algoritma Performansları (Sitesinden fotoğraf alınmıştır –XGBoost Algorithm: Long May She Reign! | by Vishal Morde)

Yukarıdaki tabloda da gördüğünüz gibi hem hızı ile hem de tahmin performansı ile ön plana çıkan XGBoost algoritmasını gelin biraz daha yakından inceleyelim.

XGBoost Kimdir, Neyin Nesidir? Nereden Detaylı Bilgi Edinebilirim ? 

350 kişinin 3600 işlemle katkıda bulunduğu Tianqi Chen ve Carlos Guestrin tarafından 2016 yılında oluşturulan gradyan yükseltme makinelerinin bir uygulamasıdır. Aynı zamanda popüler mxnet derin öğrenme kütüphanesinin yaratıcıları olan Dağıtılmış Makine Öğrenimi Topluluğu(DMLC) çatısı altındaki geniş bir araç koleksiyonuna aittir. 

Yıllar boyunca farklılık gösteren ağaç tabanlı algoritmalara bir bakalım. Hangi yollardan geçmiş bu ağaç tabanlı algoritmalar? XGBoost’un aşamaları nelermiş? Kısaca bu aşamalardan bahsedelim.

Şekil 2. Boost Algoritmalarının Yol Haritası 

Karar Ağaçları(Decision Trees): Belirli koşullara dayalı bir karara yönelik olası çözümlerin grafiksel gösterimidir.

Torbalama(Bagging): Bootstrap toplama veya torbalama, çoklu karar ağaçlarından gelen tahminleri çoğunluğa göre  oylama mekanizması aracılığıyla birleştiren bir toplu meta algoritmasıdır.

Rassal Orman(Random Forest): Bir orman veya karar ağaçları koleksiyonu oluşturmak için yalnızca bir özellik alt kümesinin rastgele seçildiği torbalama tabanlı algoritmadır.

Yükseltme(Boosting): Boosting modelleri yüksek performanslı modellerin etkisini artırırken önceki modellerden gelen hataları en aza indirgemeye dayalı sıralı oluşturma işlemidir. Yeni modellerde önceki model hatalarının çözüldüğü toplu tekniklerden başka bir şey değildir. Bu modeller, başka bir gelişme görülmeyene kadar doğrudan eklenir. Böyle bir algoritmanın en iyi örneklerinden biri AdaBoost algoritmasıdır.

Gradyan Yükseltme(Gradient Boosting): Gradyan artırma, önceki modeldeki hatayı hesaplayan yeni modellerin oluşturulduğu ve ardından son tahmini yapmak için arta kalanların eklendiği bir yöntemdir. Yazımızın ilerleyen kısımlarında daha detaylıca bahsedeceğiz 🙂

XGBoost(eXtreme Gradient Boosting):  Bunu da yeterince açıkladığımızı düşünüyorum. Ama son bir kez daha üstünden geçip detayına inelim. Paralel işleme, ağaç budama, eksik değerleri işleme ve aşırı sapmayı(overfitting) önlemek için düzenleme yoluyla optimize edilmiş gradyan yükseltme algoritmasıdır. 

Detaylıca incelemek için XGBoost linki üzerinden farklı program dillerinde ki kurulumundan tutun, nasıl çalıştığına dair bilgi edinebilirsiniz. 

Aynı zamanda Tianqi Chen’in 2016’da LA Data Science topluluğunda yaptığı konuşma linkini de buraya bırakmış olayım.

Youtube Linki:  XGBoost  A Scalable Tree Boosting System June 02, 2016

Sunum Linki: Tianqi Chen – XGBoost: Overview and Latest News – LA Meetup Talk

Neden Bu Kadar İyi Sonuçlar Veriyor ? 

2 ana başlık altında bunları inceleyelim:

  1. Sistem Optimizasyonu:
  •  Paralelleştirme(Parallelization)

Paralelleşme her ağacın inşası sırasında çok düşük bir seviyede gerçekleşir. Ağacın her bir bağımsız dalı ayrı ayrı eğitilir. Hiper parametre ayarı, ağaç başına birçok dal ve model başına birçok ağaç ve hiper parametre değeri başına birkaç model ve test edilecek birçok hiper parametre değeri gerektirir. 

  • Ağaç Budama (Tree Pruning)

Bu noktada Gradient Boost algoritmasıyla bir karşılaştırma yapalım. GBM, bölünmede negatif bir kayıpla karşılaştığında bir düğümü bölmeyi durdurur. Bu yüzden açgözlü bir algoritmadır. Diğer taraftan XGBoost, belirtilen max_depth parametresine kadar bölmeler yapar ve ağacı geriye doğru budamaya başlar. Ardından pozitif kazanım olmayan bölmeleri kaldırır.

  • Donanım Optimizasyonu

Gradyan istatistiklerini depolamak için her iş parçacığına dahili tamponlar tahsis ederek önbellek farkındalığı sağlayarak gerçekleşir. Belleğe sığmayan büyük veri çerçevelerini işlerken kullanılabilir disk alanını optimize eder.

    2. Algoritmik Kazanımlar:

  • Düzenleme(Regularization): Bu algoritmanın baskın bir faktörü olarak kabul edilir. Düzenleme, modelin aşırı uyumluluğundan kurtulmak için kullanılan bir tekniktir. 
  • Çapraz Doğrulama(Cross Validation): Fonksiyonu Scikit-learn’den içe aktararak çapraz doğrulamaya alışmışızdır, ancak XGBoost içerisine monte edilen çapraz doğrulama fonksiyonu aktive edildi.
  • Eksik Değer(Missing Value): Eksik değerleri kaldırabilecek şekilde tasarlanmıştır. Eksik değerlerdeki eğilimleri bulur ve yakalar. 
  • Esneklik(Flexibility): Modelin performansını değerlendirmek için kullanılan işlevdir ve ayrıca kullanıcı tanımlı doğrulama ölçütlerini işleyebilir.

XGBoost Parametre Ayarlaması

Model performansı söz konusu olduğunda, her parametre önemli bir rol oynar. Bu parametrelerin derinine inelim birazda. Dökümantasyonda birçok farklı parametre olduğundan, yalnızca en sık kullanılan parametrelerin üstünde duralım. Farklı parametreleri incelemek isterseniz XGBoost Documentation linki üzerinden ulaşabilirsiniz.

Parametreler aşağıda belirtilen 4 farklı sınıfa ayrılmıştır;(Önemli olanların ayrıca üstünde duracağız)

  1. Genel Parametreler
  • Booster [default=gbtree]

Kullanılacak gbtree, gblinear veya dart gibi güçlendirici türünü atayabilirsiniz. Sınıflandırma problemleri için gbtree veya dart kullanın ve regresyon için bunlardan için bunlardan herhangi birini kullanabilirsiniz. 

  • nthread [default=maximum cores available]

Nthread’in rolü paralel hesaplama işlemini etkinleştirmektir. Yalnızca hızlı hesaplamaya yol açtığı için maksimum olarak ayarlamanız ideal durumdur.

  • silent [default=0]

1’e ayarlarsanız konsolda çalışan mesajları almaya başlarsınız. Varsayılan ayarı değiştirmemenizi öneririm.

    2.  Yükseltici Parametreler(Boosting Parameters)

Booster parametresi GBTree Olarak Ayarlanırsa:(Diğer parametre seçimleri için XGBoost Parameters linkine bakmanızda fayda var)

  • eta [default=0.3, diğer adıyla: Öğrenme Hızı(learning_rate)] 

Aşırı öğrenmeyi önlemek için kullanılır. Modelin verilerden öğrendiği hızı belirlemektedir. Eta değeri küçükse hesaplama yavaş gerçekleşir. Genelde değeri 0.01-0.03 arasındadır.

  • gamma [default=0, diğer adıyla: min_split_loss] [Değer aralığı: 0,∞]

Öğrenme hızı gibi aşırı öğrenmeyi önleyici bir diğer faktör. Değeri verilere göre değişmektedir. Gamma değeri ne kadar yüksekse tutuculuk o kadar yüksek olacaktır. Grid Search ile bu parametreyi incelemekte fayda var.

  • max_depth [default=6]

Bir ağacın maksimum derinliği. Bu değeri artırırsanız modelinizi daha karmaşık hale getirirsiniz ve aşırı öğrenmenin önünü açarsınız. Belirli sabit bir değeri yoktur. Verilerin boyutuna göre belirlenmelidir. Cross Validation kullanarak ayarlamalar yapabilirsiniz.

  • min_child_weight [default=1] [değer aralığı: 0,∞]

Karar ağaçları oluşturulurken nodların entropisini hessian’lar cinsinden hesaplama işlemi yapmaktadır. Aşırı öğrenmeyi engelleyen bir diğer parametresi. Nodların ne kadar ayrılacağını belirlemede kullanılmaktadır. Bu işlem ağacının derinliğini de etkilemektedir. Cross Validation kullanarak uygun değeri bulabilirsiniz.

  • subsample [default=1] [değer aralığı:0,1]

Değerleri genellikle 0.5-0.8 aralığındadır. Ağaçlara verilen örnekleri kontrol etmektedir. Örnek olarak, 0.5 değerine ayarlarsanız, XGBoost’un ağaçları büyütmeden önce eğitim verilerinin yarısını rastgele örneklemesine izin verirsiniz ve bu da fazla öğrenmeyi önleyecektir.

  • lambda [default=0]

Aşırı öğrenmeyi önlemek için kullanılan bir diğer parametredir. L2 regülasyonunu kontrol etmektedir.Değeri arttırırsanız modeliniz daha tutucu hale gelecektir.

  • alpha [default=1]

Alpha’yı etkinleştirmeniz, yüksek boyutlu veri kümeleri için daha kullanışlı olmaktadır. Ağırlıklardaki L1 regülasyonunu kontrol etmektedir. Değeri arttırırsanız modeliniz daha tutucu hale gelecektir.

3) Öğrenme Görevi Olan Parametreler 

  1. Objective [default=reg:linear]
  • Reg: linear- Doğrusal regresyon için kullanılmaktadır.
  • Binary: logistic – Sınıf olasılıklarını döndüren ikili sınıflandırma problemleri için lojistik regresyon kullanmaktadır.
  • Multi: softmax- Çoklu sınıf problemleri için softmax kullanmaktadır. Ayrıca, sınıf sayısı num_class parametresini ayarlamanız gerekmektedir.
  • Multi: softprob- Softmax ile aynıdır fakat ndata*nclass matrisini şekillendirir. Sonuç olarak, her sınıfa ait her veri noktasının tahmin edilen olasılığını içermektedir.

   2. eval_metric [default değeri yoktur, objective seçiminize göre şekillenir]

Bu parametre, bir modelin genelleme yeteneğini doğrulamak için kullanılmaktadır. Sınıflandırma problemi için default değeri error, regresyon problemi için ise default değeri RMSE’dir.

Error fonksiyonları listesini aşağıda bulabilirsiniz:

  • mae – Regresyon problemlerinde kullanılır.
  • Log loss – Çapraz entropi kaybı veya log kaybı diyebiliriz. Çıktısı 0 ile 1 arasında bir olasılık değeri olan bir sınıflandırma modelinin performansını ölçer. 
  • AUC – Sınıflandırmada kullanılan eğri altında kalan alan.
  • RMSE (Root Mean Square Error) – Regresyon problemlerinde kullanılır.
  • Error – İkili sınıflandırmadaki hata oranı
  • mlogloss – Çoklu sınıflandırmada log kaybını kullanmaktadır.

Genel olarak XGBoost’un mantığını, nasıl çalıştığını, parametreler ile oynandığında ne gibi farklar yaratabileceğini anlatabilmişizdir umarım. Hadi gelin biraz daha derine AdaBoost ve GradientBoost örnekleri ile devam edelim.

AdaBoost

Yüksek düzeyde, AdaBoost, son sınıflandırmaya karar vermek için ormandaki her bir karar ağacının yaptığı tahminleri belirlemesi açısından Random Forest’a benzer. Bununla birlikte, bazı ince farklılıklar vardır. Örneğin AdaBoost’ta karar ağaçlarının derinliği 1’dir (yani 2 yaprak). Ek olarak, her bir karar ağacının yaptığı tahminler, model tarafından yapılan nihai tahmin üzerinde farklı etkilere sahiptir.

AdaBoost modelinin nasıl çalıştığını anlatmak için örnek bir veri kümesi oluşturalım.

Spor Yapmak Dengeli Beslenmek Ağırlık(kg) Sağlıklı
Evet Evet 80 Evet
Evet Hayır 76 Evet
Evet Evet 72 Hayır
Hayır Evet 84 Evet
Hayır Hayır 52 Hayır
Evet Evet 49 Evet
Hayır Evet 64 Hayır

İlk adımda, her bir örneğe sınıflandırma yapmak için bir ağırlık vermemiz gereklidir.

=> 1 / toplam örnek sayısı 

toplam örnek sayısı = 7

Spor Yapmak Dengeli Beslenmek Ağırlık(kg) Sağlıklı Örnek Ağırlık
Evet Evet 80 Evet 17
Evet Hayır 76 Evet 17
Evet Evet 72 Hayır 17
Hayır Evet 84 Evet 17
Hayır Hayır 52 Hayır 17
Evet Evet 49 Evet 17
Hayır Evet 64 Hayır 17

Eğitim örneklerini sınıflandırmada en iyi işi yapan özellik(feature) ilk ağaç olacaktır.

Spor yapmak: Evet & Sağlıklı : Evet => ¾

Spor yapmak: Evet & Sağlıklı : Hayır => ¼

Spor yapmak: Hayır & Sağlıklı : Evet => ⅓

Spor yapmak: Hayır & Sağlıklı: Hayır => ½

Gini Index = 1 -[ 34^2 +14^2 ] = 0.375

Gini Index = 1 -[ 13^2 +24^2 ] = 0.6411

Spor Yapmak Gini Index Değeri: 47*0.375 +37*0.6411  = 0.4889

Ağırlık > 68 & Sağlıklı : Evet => ¾

Ağırlık > 68 & Sağlıklı : Hayır => ¼

Ağırlık  < 68 & Sağlıklı : Evet => ⅓

Ağırlık  < 68 & Sağlıklı: Hayır => ⅔

Gini Index = 1 -[ 34^2 +14^2 ] = 0.375

Gini Index = 1 -[ 13^2 +23^2 ] = 0.4555

Ağırlık Gini Index Değeri: 47*0.375 +37*0.4555  = 0.4094


2 farklı özelliğin(feature) (spor yapmak ve ağırlık) gini index değerlerini yukarıda hesapladık. Ağırlık değişkeninin gini index değeri daha düşük çıktığı için ilk ağacımız bu olacaktır. 

Her ağaçtaki doğru veya yanlış sınıflandırmaların yeni ağırlık değerlerini belirleyeceğiz. 

½ log(1- 1/71/7) = 0.8961

Yeni Örnek Ağırlık = Örnek Ağırlık x e^amount of say

      =  1/7 x e^amount of say olacaktır.

NOT: Doğru sınıflandırılan sınıflar için e^(-amount of say), yanlış sınıflandırılan sınıflar için e^amount of say değeri kullanılacaktır.

Yeni örnek ağırlık : 1/7 x e^(-amount of say)= 1/7 x e^(-0.8961) = 0.40

Yeni örnek ağırlık : 1/7 x e^amount of say= 1/7 x e^(0.8961) = 0.34

Spor Yapmak Dengeli Beslenmek Ağırlık(kg) Sağlıklı Örnek Ağırlık Yeni Örnek Ağırlık Normal Ağırlık
Evet Evet 80 Evet 17 0.40 0.24
Evet Hayır 76 Evet 17 0.40 0.24
Evet Evet 72 Hayır 17 0.34 0.12
Hayır Evet 84 Evet 17 0.40 0.24
Hayır Hayır 52 Hayır 17 0.34 0.12
Evet Evet 49 Evet 17 0.40 0.24
Hayır Evet 64 Hayır 17 0.34 0.12
Spor Yapmak Dengeli Beslenmek Ağırlık(kg) Sağlıklı Normal Ağırlık *
Evet Evet 80 Evet 0.24 0 ve 0.24 arasında
Evet Hayır 76 Evet 0.24 0.24 ve 0.48 arasında
Evet Evet 72 Hayır 0.12 0.48 ve 0.60 arasında
Hayır Evet 84 Evet 0.24 0.60 ve 0.84 arasında
Hayır Hayır 52 Hayır 0.12 0.84 ve 0.96 arasında
Evet Evet 49 Evet 0.24 0.96 ve 1.20 arasında
Hayır Evet 64 Hayır 0.12 1.20 ve 1.32 arasında

Yukarıdaki tablodan artık yeni bir ağaç modeli oluşturabiliriz. * sütunda hangi ağırlık değeri ile örnek bir veri oluşturacak isek onu seçebiliriz.

Yukarıdaki Örneğe göre rastgele 0.72 ağırlıklı belirlediğimiz bir test verisi. 

Spor Yapmak Dengeli Beslenmek Ağırlık(kg) Sağlıklı
Hayır Evet 84 Evet

0.72 ağırlıklı örnek veri 0.60 ve 0.84 değerleri arasında olacaktır. Bu da bize örnek verinin hangi sınıfa ait olabileceğini göstermektedir.

Gradient Boost

Gradient Boost algoritması regresyon ve sınıflandırma problemleri için karar ağaçlarına (Random Forest) benzer tahmin modelleri oluşturan bir makine öğrenmesi tekniğidir. Gradient Boost algoritması AdaBoost gibi her ağaçtan sonra bir iyileştirme yapmak için düğüm oluşturmamaktadır. Bunun yerine Yaprak (Leaf) ile başlar. Bu yaprak tüm ağırlıklar için bir ilk tahmini temsil eder. Buradaki ilk tahmin ortalama değerdir. Ardından Gradient Boost bir ağaç oluşturur.

Boy(m) Favori Renk Cinsiyet Ağırlık(kg)
1.6 Kırmızı Kadın 52
1.7 Mavi Erkek 80
1.8 Yeşil Erkek 76
1.6 Kırmızı Kadın 49
1.7 Mavi Kadın 48

Yukarıdaki tabloda gösterilen örnek bir veri kümesi üzerinde Gradient Boost yöntemini anlatmaya çalışalım. Burada Ağırlık değişkeni gibi sürekli bir değeri tahmin etmek için Regresyon gibi Gradient Boost algoritması da kullanılabilir.

İlk adım Ağırlık değişkeninin ortalama değerini bulmaktır.

Ortalama = (52 + 80 + 76 + 49 + 48) / 5  =  61

Sonraki adım bir ağaç oluşturmaktır. Öncesinde gözlemlenen her bir Ağırlık değerinden, ortalaması alınmış Ağırlık değerinin farkını hesaplayacağız. 

Ağırlık – Tahmini Ağırlık = 52 – 61 = – 9

Boy(m) Favori Renk Cinsiyet Ağırlık(kg) Hata
1.74 Kırmızı Kadın 52 -9
1.68 Kırmızı Erkek 80 19
1.81 Yeşil Erkek 76 4
1.63 Kırmızı Kadın 49 -12
1.72 Mavi Kadın 48 -13

Aynı yaprakta bulunan değerlerden dolayı ((-9) + (-13)) / 2 = -11

Hata = Gözlenen Ağırlık  – Tahmini Ağırlık

Learning Rate(Öğrenme oranı) = 0,1 

52 – (61 + 0.1 * -9) = -8.1

Boy(m) Favori Renk Cinsiyet Ağırlık(kg) Hata Hata
1.74 Kırmızı Kadın 52 -9 -8.1
1.68 Kırmızı Erkek 80 19 17,1
1.81 Yeşil Erkek 76 4 15,6
1.63 Kırmızı Kadın 49 -12 -10,8
1.72 Mavi Kadın 48 -13 -11,7

Yukarıdaki Örneğe göre Rastgele Belirlediğimiz Bir Test Verisi

Boy(m) Favori Renk Cinsiyet Ağırlık(kg)
1,78 Yeşil Erkek ? (72)

Gradient Boost Classification 

Gradient Boost algoritmasının sınıflandırma problemlerinde de uygulanabilmesinden bahsetmiştik. Şimdi araç satın alma sürecinde araç bilgileri ile müşterilerin satın aldıkları / satın alacakları aracı beğenme durumuyla ilgili bir örnek veri kümesi alalım.

Yakıt Müşteri Yaş Favori Renk Durum
Benzin 43 Beyaz Evet
Dizel 58 Kırmızı Evet
Benzin 36 Beyaz Hayır
Benzin 39 Siyah Hayır
Dizel 62 Beyaz Evet
Dizel 60 Siyah Evet

Sınıflandırma için Gradient Boost kullandığımızda, her örnek için ilk tahmin “Durum”’ların oranı olur.

Yukarıdaki veri kümesinden;

Evet sayısı → 4

Hayır sayısı → 2 

İlk adımda Durum değişkeninin “Evet” olma olasılığını hesaplarsak;

doğal logaritma(4/2) = ln(4/2) = 0.7

Evet = 1, Hayır =0 iken

Hata = (1 – 0.7) = 0.3

(1 – 0.7) = 0.3

(0 – 0.7) = -0.7

….

Yakıt Müşteri Yaş Favori Renk Durum Hata
Benzin 43 Beyaz Evet 0.3
Dizel 58 Kırmızı Evet 0.3
Benzin 36 Beyaz Hayır -0.7
Benzin 39 Siyah Hayır -0.7
Dizel 62 Beyaz Evet 0.3
Dizel 60 Siyah Evet 0.3

-0.7, 0.3 değerleri tek bir yaprakta sınırlandırmalıyız. 

(-0.7 + 0.3) / 2 = -0.2 olur.

Learning Rate (öğrenme oranı) : 0.8 seçelim.

Tahmin =  0.7 + (0.8 * -0.2) =  -0.54

Olasılık =  (e^ -0.54) / (1 + e^ -0.54) = 0.36

Yukarıdaki Örneğe göre Rastgele Belirlediğimiz Bir Test Verisi

Yakıt Müşteri Yaş Favori Renk Durum Tahmin
Dizel 64 Siyah Evet ? (0.71)

Durum değişkeninin ln(4/2) oranı = 0.7 

Learning rate(öğrenme oranı) = 0.8 

Renk Kırmızı olmayan ve Yaş 59’ dan büyük olan değeri gösteren yaprak(leaf) değeri = 0.3

=> 0.7 + (0.8 * 0.3) = 0.94

=> e^ 0.94 / (1+ e^ 0.94) = 0.71 

=> ? = (0.71)

Burada Gradient Boost algoritmasının arka planda nasıl çalıştığına dair bir örnek veri kümesi oluşturup üzerinde çalıştık. Regresyon problemlerinde ve Sınıflandırma problemlerinde de Gradient Boost algoritmasının nasıl çalıştığından bahsettik. Son olarak yeri gelmişken bir başka gradyan tabanlı CatBoost algoritmasından da bahsedelim. 

CatBoost

Son olarak CatBoost’tan da bahsedelim. Adını “Category” ve “Boosting” kelimelerinden alan CatBoost, karar ağaçları tabanlı gradyan yükseltme algoritmasıdır. Yandex araştırmacıları tarafından geliştirilmiştir. Yandex, CERN, Cloudfare ve Careem taksi gibi firmalarda arama, öneri sistemleri, kişisel asistan, kendi kendine giden arabalar, hava durumu tahmini vb. görevler için kullanılmaktadır. Açık kaynaklı olup herkes tarafından kullanılabilmektedir. 

CatBoost Nasıl Çalışır?

CatBoost ile diğer boosting algoritmaları arasındaki temel farklardan biri, CatBoost’un simetrik olarak ağaçlar üretmesidir. Bu sayede eğitim süresinde ciddi anlamda azalmaya sebep olmaktadır. 

Şekil 3. max_depth=6 (Maksimum derinliği=6) olan CatBoost Algoritmasının Simetrik Ağaç Üretimi 

Aynı zamanda CatBoost ile Yandex’in belirttiği önemli noktalardan biri de, simetrik olarak ürettiği ağaçlar ile yaşanan kayıpların azalacağını vaad etmektedirler. 

Şekil 4. Simetrik Ağaçlar ile Düğüm Düğüm(Gradient Boost Yapısı) Oluşturulan Ağaç Yapıları

Yukarıda belirtilen örnekte simetrik ağaçlarda yaş özelliğine inecek olsaydık, boş kalan 4 yaprağın yaş özelliğiyle dolu olduğunu görecektiniz. Yapılan bu yaklaşım ile CatBoost’un diğer boosting algoritmlarıyla ayrıştırıcı özelliğinin simetrik ağaçlar olduğunu görebilirsiniz. Yapılan bu işlem ile en önemli nokta CatBoost’un hızlı çalışmasına izin vermektedir. 

Detaylı bilgi için Overview of CatBoost linki üzerinden de bilgi edinebilirsiniz.

CatBoost Kütüphanesinin Avantajları

4 başlık altında CatBoost’un avantajlarından bahsedelim;

  1. Performans: CatBoost performans açısından ön planda olan algoritmalarla rekabet etme kapasitesi vardır. Aynı zamanda hız açısından son derece performansı yüksektir. 

Tablo 1. Epsilon Dataseti(400k samples, 2000 features) bulundurmaktadır. Karşılaştırmada ele alınan parametreler: 128 bins, 64 leafs, 400 iterations

XGBoost algoritmasını diğer birkaç algoritma ile çalışma hızı ve gösterdiği performans açısından incelemiştik. O incelemeyi de bu tablonun yanına koyarak göz geçirmenizi öneririm. 

Tablo 2. Veri Kümelerine göre CatBoost, LightGBM, XGBoost, H2O algoritmarı Sonuçları

Elde ettiği başarılı sonuçları da ek olarak buraya eklemiş olalım. Detaylıca baktığımızda elde edilen sonuçlarda CatBoost’un performansı hem hız açısından hem de performans açısından tatmin edici sonuçlar içerdiğini görüyoruz.

  1. Kategorik özelliklerin otomatik olarak ele alınması: CatBoost ile kategorileri sayılara dönüştürmeden, preprocessing işlemleri yapmadan kullanabiliriz. 
  2. Düzenleme: XGBoost gibi aşırı öğrenmeyi azaltacak parametreleri bulunmaktadır. Detaylıca incelemek için Parameter tuning linki üzerinden yararlanabilirsiniz.
  3. Kullanım Kolaylığı: Scikit-learn ile entegredir. Python ve R  ile kullanım kolaylığı sağlamaktadır.

Şimdilik yazımızın sonuna geldik. Genel olarak boosting algoritmalarına baktığımızda, her birinin avantajları ve dezavantajları bulunmakta. Bu sebeple, projenize göre her biri farklı sonuçlar doğurabilir. Bir sonraki yazımızda Housing Prices Competition for Kaggle Learn Users verisi üzerinde boosting algoritmalarının nasıl sonuçlandığını inceleyeceğiz. 

Sağlıcakla kalın 🙂 

Ersan Balaban ve Oktay Samur

Yararlandığımız Kaynaklar

  1. [1706.09516] CatBoost: unbiased boosting with categorical features
  2. [1603.02754] XGBoost: A Scalable Tree Boosting System
  3. XGBoost Algorithm: Long May She Reign! | by Vishal Morde
  4. XGBoost  A Scalable Tree Boosting System June 02, 2016
  5. Tianqi Chen – XGBoost: Overview and Latest News – LA Meetup Talk
  6. Introduction to XGBoost Algorithm for Classification and Regression
  7. Understanding AdaBoost. Anyone starting to learn Boosting… | by Akash Desarda
  8. XGBoost Documentation — xgboost 1.3.0-SNAPSHOT documentation
  9. CatBoost Parameter tuning
  10. Overview of CatBoost
  11. VIHAR KURAMA – AdaBoost 
  12.  Principles of Machine Learning | AdaBoost
  13.  StatQuest with Josh Starmer
  14.  Anna Veronika Dorogush – CatBoost – the new generation of Gradient Boosting