Gradient Boosting vs Rastgele Orman
Karar ağacı tabanlı algoritmalar günlük veri bilimi problemlerinin çözümünde sıklıklı tercih edilmektedir. Bu noktada, rastgele orman (random forest) ve gradient boosting yöntemleri karar ağaçlarından türetilmiş en yaygın yaklaşımlardır. Bu yazımızda bu iki yöntemi karşılaştırarak benzer ve farklı yönlerini tartışacağız.
Rastgele orman
Yöntemin isminde de yer alan rastgelelik veri setinin rastgele şeklinde çok sayıda daha ufak veri setlerine ayrılması işleminden gelmektedir.
Binlerce kitap bulunan bir kütüphaneyi gözünüzün önüne getirin. Tekil bir karar ağacı algoritması tüm bu kitapları tek tek okumanızı bekler. Bunun yerine rastgele orman algoritması tüm bu kitapların yüzlerce kişi arasında bölüşülerek okumasını tavsiye eder. Böylelikle hiç kimse tüm kitapları okumuş bir bilge ile aynı düzeyde olmayacaktır ama bu yüzlerce kişi bir araya gelerek o bilgeye yakın hatta ondan daha iyi düzeyde bilgiye sahip olabilir.
Rastgele orman da bu örneğe oldukça benzemektedir. Tüm veri setini bir karar ağacı algoritmasına beslemek yerine onu çok parçaya bölerek çok sayıda karar ağacı algoritmasına besleyerek rastgele ormanı oluşturabilirsiniz.
Gradient boosting
Yöntem gradient descent ve boosting kelimelerinin bir araya gelmesi ile meydana gelmiştir. Özetle karar ağaçlarının sonuçlarını gradient descent algoritmasını kullanarak iyileştirir. Rastgele ormandaki gibi veri setini çoklu sayıda alt veri setine bölme bu yaklaşımda uygulanmamaktadır. Veri setini olduğu gibi kullanarak bir karar ağacı kurulur ve bunun hatalarından yola çıkarak yeni bir karar ağacı daha oluşturulur. Böylelikle ardışık (sequential) yüzlerce karar ağacımız olur.
LightGBM ve XGBoost bugünlerde en popüler gradient boosting uyarlamalarıdır. Bu iki kütüphanenin karşılaştırmasını yaptığımız yazı ilginizi çekebilir.
Karar alma
Rastgele orman birbirinden bağımsız çok sayıda ağaç üretmektedir. Sınıflandırma görevleri için bu çok sayıda ağacın verdiği kararlar arasında en baskın bizim nihai kararımız olmaktadır. Bu sebeple rastgele üretilecek ağaç sayısının asal sayı olmasına özen gösterilir. Regresyon görevleri için ise her bir bağımsız ağacın verdiği kararın ortalaması veya medyanı kullanılabilir.
Gradient boosting ise ardışık ve bağımlı çok sayıda ağaç üretmektedir. Tüm bu ağaçların verdiği kararların toplamını bularak nihai kararı vermiş oluyoruz.
Ağaç algoritmaları
Hem rastgele orman hem de gradient boosting aslında karar ağaçlarını kullanan birer yaklaşımdır. Her ikisi de çekirdek karar ağacı algoritmalarını kullanır.
Rastgele ormanı bir sınıflandırma görevi için kullanıyorsanız: ID3, C4.5, CART, CHAID gibi algoritmaları kullanabilirsiniz. Rastgele ormanı regresyon görevlerinde kullandığımız zaman da regresyon ağaçları algoritması kullanılabilir.
Öte yandan gradient boosting ise her zaman regresyon ağaçlarını ağaç üretmek için kullanır. Sınıflandırma problemlerinde bile! Karar alma adımında ağaçların verdiği kararların toplamını kullandığımızı hatırlayın. Bu ancak nümerik tahminlerde bulunan ağaçlar için uygulanabilir.
Paralel programlama
Rastgele ormanlarda veri seti çok sayıda alt veri setine hali hazırda bölünmüş olacağından ve bu alt veri setleri birbirinden bağımsız oldukları için karar ağacı algoritmaları paralel olarak çalıştırılabilir.
Ancak gradient boosting ardışık ve bağımlı ağaçlara ihtiyaç duyar. Örneğin 2. ağaç, 1. ağacın hataları ile inşa edilir. Dolayısıyla 2. ağacın inşası için 1. ağacın oluşmuş olması gerekmektedir. Dolayısıyla bu ardışık ağaçlar seri şekilde oluşturulmalıdır. Ama yine de bir karar ağacının farklı dallarını paralel olarak inşa edebildiğimiz için GBM’i de kısmen paralel çalıştırmamız mümkündür.
Bonus
Gradient boosting’in derin öğrenmeyle bile baş edebildiğini biliyor musunuz? Makine öğrenmesi savaşları yazımız ilginizi çekebilir.
Sonuç
Bu yazımızda karar ağacı tabanlı iki önemli yönteme değindik ve birbirlerine benzeyen ve farklı oldukları noktaları tartıştık. Her iki yöntemin Kaggle gibi günlük veri bilimi yarışmalarında sıklıkla kullanıldıklarını biliyoruz.
Bu yazı Random Forest vs Gradient Booting yazısından Türkçe’ye çevrilmiştir.