Ağaçların Artırılması ve Torbalanması (XGBoost, LightGBM)


17

Ağaçları torbalama veya artırma fikirleri hakkında birçok blog yazısı, YouTube videosu vb. Var . Genel anlayışım, her biri için sözde kod:

torbalama:

  1. Örneklerin% x'i ve özelliklerin% y'i N rasgele örneği alın
  2. Modelinizi (örn. Karar ağacı) N
  3. Her bir N ile tahmin edin
  4. Nihai tahmini almak için tahminleri ortalayın

Arttırılması:

  1. Modelinizi (örn. Karar ağacı) verilerinize sığdırın
  2. Kalanları alın
  3. Modelinizi artıklara sığdırın
  4. N yükseltme turu için 2'ye gidin
  5. Nihai tahmin, sıralı öngörücülerin ağırlıklı toplamıdır.

Yukarıdaki anlayışımla ilgili herhangi bir açıklama yapacağım, ancak hedeflediğim soru şu:

Hem XGBoost hem de LightGBM'nin torbalamaya izin veren parametreleri vardır. Uygulama Torbalama VEYA Boosting (her blog yazısı hakkında ne konuşur) değil, Bagging VE Boosting. Kombine torbalama ve takviye işleminin nerede ve ne zaman gerçekleştiği için sahte kod nedir?

Bunun "Torbalı Artırılmış Ağaçlar" olmasını bekliyordum, ama öyle görünüyor ki "Artırılmış Torbalı Ağaçlar". Fark önemli görünüyor.

Torbalı Artırılmış Ağaçlar:

  1. Örneklerin% x'i ve özelliklerin% y'i N rasgele örneği alın
  2. N örneklerinin her birine Boosted ağaçlar sığdır
  3. Her bir N ile tahmin edin
  4. Nihai tahmini almak için tahminleri ortalayın

Bu, bunu yapmanın en iyi yolu gibi görünüyor. Sonuçta, artırma riski fazla takmaktır ve torbalamanın birincil yararı fazla takmayı azaltmaktır; bir sürü güçlendirilmiş modelin torbalanması harika bir fikir gibi görünüyor.

Ancak, örneğin scikit-learn gradient_boosting.py (örnek torbalama, ancak rastgele özellik seçimi yapmayan) ve LightGBM ve XGBoost ile ilgili gönderiler arasında bazı küçük külçeleri bir araya getirerek XGBoost ve LightGBM aşağıdaki gibi çalışır:

Artırılmış Torbalı Ağaçlar:

  1. Verilerinize bir karar ağacı sığdırın
  2. N'de N arttırıcı mermiler için:
    • Kalanları alın
    • i bag_frequency == 0 modunu değiştirirseniz (yani her 5 mermi bir torbada):
      • Örneklerin% x'i ve özelliklerin% y'si gibi tek bir rastgele örnek alın; ileride bu rastgele örneği kullan
    • artıklara ağacı sığdır
  3. Nihai tahmin, sıralı öngörücülerin ağırlıklı toplamıdır.

Lütfen buradaki anlayışımı düzeltin ve ayrıntıları doldurun. Artırılmış Torbalı Ağaç (bag_frequency başına sadece 1 rastgele ağaçla) Torbalı Artırılmış Ağaç kadar güçlü görünmüyor.


2
İlginç ve çok iyi formüle edilmiş bir soru için +1. Ve siteye hoş geldiniz.
mkt - Monica'yı eski haline

artırmanız için bir "hatayı hesapla" seçeneğine ihtiyacınız var. Parçalanan yanlış yapılıyor. Ağırlıklar, uyarlamak için kritik öneme sahiptir. Ham bir artık değil. ... her şeyi hızlandırsa da, artırmada gereken şekilde stokastik eğimden bahsetmiyoruz.
EngrStudent - Monica

İşte güçlendirilmiş torbalı. Her seri adım için yeni bir ağaç yerine, ortalama çıktıya sahip yeni bir orman elde edersiniz. Tuv ve Kari Torkkola Karşılaştırması. jmlr.org/papers/volume10/tuv09a/tuv09a.pdf
EngrStudent - Monica'yı

Torbalı güçlendirilmiş seri topluluklar ormanı yapacak ve ortalama çıktı alacak. Bir dizi (güçlendirilmiş) topluluğun yapabileceği ve daha sağlam bir çıktı verebileceği aşırı uydurma yapabilir, ancak kazanç çok büyük olmayacaktır.
EngrStudent - Monica

Yanıtlar:


13

Torbalama: Numunelerin% x'i ve Özelliklerin% y'i N rastgele numunesi alın

Örnekleri defalarca alt örneklenmiş olan Torbalama değil bulunmaktadır. ( RandomForests , XGBoost ve CatBoost her ikisini de yapar):

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    Train model on D_i (and then predict)
Combine predictions with equal weight 

Fazlalıktan kurtulmak için Yükseltme sözde kodunuza bir başlatma adımı ekleyin :

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted data (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

Torbalı Artırılmış Ağaçlar (siz dediğiniz gibi) kesinlikle makul bir Yaklaşımdır, ancak XGBoost veya CatBoost'tan farklıdır :

Given dataset D of size N.
For m in n_models:
    Create new dataset D_i of size N by sampling with replacement from D.
    (Insert Boosting pseudo code here (on D_i))
Combine predictions with equal weight 

XGBoost ve CatBoost , Boosting'e dayanır ve tüm eğitim verilerini kullanır. Ayrıca, her artırıcı yinelemede bir kez alt örnekleme ile torbalama uygularlar:

Init data with equal weights (1/N).
For m in n_model:
    Train model on weighted bootstrap sample (and then predict)
    Update weights according to misclassification rate.
    Renormalize weights
Combine confidence weighted predictions

"Modeli artıklara sığdır" seçeneğine bağlı kalmak istiyorsanız, bu "modeli önyükleme örneğindeki veri artıklarına sığdır" ile eşdeğer olacaktır .


Diğer açıklamalar :

Önerdiğiniz gibi " bunu yapmanın en iyi yolu " yoktur (ücretsiz öğle yemeği teoremi yoktur). "Torbalı Artırılmış Ağaçlar", belirli veri kümelerinde XGBoost'tan daha iyi performans gösterebilir.

Örneklerin% x'inden tek bir rastgele örnek alın

Bu çizgi kafa karıştırıcı. Bunu nereden aldın?

i bag_frequency == 0 modunu değiştirirseniz (yani her 5 mermi bir torbada):

Bu sözde kodunuzda belirtilmemelidir. Özellikle daha önemli parametreler dışında kaldığında (hızlanmada öğrenme oranı gibi ).


(+1) Güzel cevap! Açıklığa kavuşturmak için: OP, " Hem XGBoost hem de LightGBM'nin torbalamaya izin veren parametreler var " şeklinde yanlış mı?
mkt - Monica

Hem torbalama için izin: bagging_fraction içinde LightGBM ve alt örnek içinde XGBoost . Emin değilim, neden sürekli CatBoost'a başvurdum. Fakat hepsi soru ile aynı şekilde çalışır.
Laksan Nathan

Benim hatam, cevabınızdaki bundan bahseden çizgiyi kaçırdım. " Her arttırıcı yinelemede alt örneklemeyi bir kez " açıklayabilir misiniz ? Her bir arttırma yinelemesinde, birçok alt numunenin alındığı, her alt örneğe ağaçların sığdığı ve daha sonra yanlış sınıflandırma oranının torbalanmış ağaçlara göre hesaplandığı ve son olarak ağırlıkların güncellendiği anlamına mı geliyorsunuz? Öyleyse, sözde kodunuzda bunu açıklayabilir misiniz?
mkt - Monica

Çok sayıda alt örnek çizilmez, sadece bir tane: Modeli tüm ağırlıklı örneklere yerleştirmek yerine, model bir önyükleme örneği üzerinde eğitilir.
Laksan Nathan

"Örneklerin% x'inin tek bir rastgele örneğini al" ile ilgili olarak; "satırların% x'inden tek bir örnek al" iyi olur. Buradan anladım .
Jonathan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.