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:
- 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)
- 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
- 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;
- 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.
- Kategorik özelliklerin otomatik olarak ele alınması: CatBoost ile kategorileri sayılara dönüştürmeden, preprocessing işlemleri yapmadan kullanabiliriz.
- Düzenleme: XGBoost gibi aşırı öğrenmeyi azaltacak parametreleri bulunmaktadır. Detaylıca incelemek için Parameter tuning linki üzerinden yararlanabilirsiniz.
- 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 🙂
Yararlandığımız Kaynaklar
- [1706.09516] CatBoost: unbiased boosting with categorical features
- [1603.02754] XGBoost: A Scalable Tree Boosting System
- XGBoost Algorithm: Long May She Reign! | by Vishal Morde
- XGBoost A Scalable Tree Boosting System June 02, 2016
- Tianqi Chen – XGBoost: Overview and Latest News – LA Meetup Talk
- Introduction to XGBoost Algorithm for Classification and Regression
- Understanding AdaBoost. Anyone starting to learn Boosting… | by Akash Desarda
- XGBoost Documentation — xgboost 1.3.0-SNAPSHOT documentation
- CatBoost Parameter tuning
- Overview of CatBoost
- VIHAR KURAMA – AdaBoost
- Principles of Machine Learning | AdaBoost
- StatQuest with Josh Starmer
- Anna Veronika Dorogush – CatBoost – the new generation of Gradient Boosting