Ada banyak posting blog, video YouTube, dll. Tentang ide mengantongi atau meningkatkan pohon. Pemahaman umum saya adalah bahwa kode pseudo untuk masing-masing adalah:
Mengantongi:
- Ambil N sampel acak x% dari sampel dan y% dari fitur
- Paskan model Anda (misalnya, pohon keputusan) pada masing-masing N
- Prediksi dengan setiap N
- Rata-rata prediksi untuk mendapatkan prediksi akhir
Meningkatkan:
- Sesuaikan model Anda (mis. Pohon keputusan) dengan data Anda
- Dapatkan residunya
- Sesuaikan model Anda dengan residu
- Pergi ke 2 untuk putaran meningkatkan N
- Prediksi akhir adalah jumlah tertimbang dari prediksi berurutan.
Saya akan mengambil klarifikasi apa pun untuk pengertian saya di atas, tetapi pertanyaan yang saya maksudkan adalah sebagai berikut:
Baik XGBoost dan LightGBM memiliki params yang memungkinkan untuk mengantongi. Aplikasi ini bukan Mengantongi ATAU Meningkatkan (yang dibicarakan setiap posting blog), tetapi Mengantongi DAN Meningkatkan. Apa kode pseudo untuk di mana dan kapan penggabungan dan peningkatan gabungan terjadi?
Saya berharap itu menjadi "Pohon Boosted Bagged", tetapi tampaknya itu adalah "Pohon Boosted Bagged". Perbedaannya tampak substansial.
Pohon-pohon Boosted yang Dikantongi:
- Ambil N sampel acak x% dari sampel dan y% dari fitur
- Cocokkan pohon-pohon Boosted pada masing-masing sampel N
- Prediksi dengan setiap N
- Rata-rata prediksi untuk mendapatkan prediksi akhir
Ini sepertinya cara terbaik untuk melakukannya. Lagipula, risiko dalam meningkatkan overfitting dan manfaat utama mengantongi adalah mengurangi overfitting; mengantongi banyak model yang dikuatkan sepertinya ide yang bagus.
Namun, dari melihat melalui, misalnya scikit-learn
gradient_boosting.py (yang tidak mengantongi sampel, tetapi bukan pemilihan fitur acak), dan menyatukan beberapa nugget kecil di seluruh tulisan tentang LightGBM dan XGBoost, sepertinya XGBoost dan LightGBM berfungsi sebagai berikut:
Boosted Bagged Trees:
- Sesuaikan pohon keputusan dengan data Anda
- Untuk saya dalam putaran meningkatkan N:
- Dapatkan residunya
- jika saya mod bag_frequency == 0 (yaitu, bag setiap 5 putaran):
- Ambil sampel acak tunggal x% dari sampel dan y% dari fitur; gunakan sampel acak ini untuk maju
- paskan pohon dengan residu
- Prediksi akhir adalah jumlah tertimbang dari prediksi berurutan.
Harap perbaiki pemahaman saya di sini dan isi detailnya. Boosted Bagged Tree (dengan hanya 1 pohon acak per bag_frequency) sepertinya tidak sekuat Bagged Boosted Tree.
Jawaban:
Contoh berulang kali disub-sampel di Bagging , tetapi tidak di Fitur. ( RandomForest , XGBoost dan CatBoost melakukan keduanya):
Sertakan langkah inisialisasi dalam kode pseudo Boosting Anda untuk menghilangkan redundansi:
Boosted Trees Bagged (seperti Anda menyebutnya) tentu saja merupakan Pendekatan yang masuk akal, tetapi berbeda dari XGBoost atau CatBoost :
XGBoost dan CatBoost keduanya didasarkan pada Peningkatan dan penggunaan seluruh data pelatihan. Mereka juga menerapkan bagging dengan berlangganan sekali dalam setiap Iterasi meningkatkan:
Jika Anda ingin tetap menggunakan "fit model to residuals", maka ini akan sama dengan "fit model to residuals data dalam sampel bootstrap ".
Keterangan Lebih Lanjut :
Tidak ada " cara terbaik untuk melakukannya " seperti yang Anda sarankan (tidak ada teorema makan siang gratis). "Bagged Boosted Trees" mungkin mengungguli XGBoost pada set data tertentu.
Baris ini membingungkan. Darimana kamu mendapatkan ini?
Ini tidak harus disebutkan dalam kode semu Anda. Terutama ketika ada parameter lain yang lebih penting yang ditinggalkan (seperti tingkat pembelajaran dalam meningkatkan).
sumber