Gradient Boosting Tree: "semakin banyak variabel semakin baik"?

10

Dari tutorial XGBoost, saya pikir ketika setiap pohon tumbuh, semua variabel dipindai untuk dipilih untuk membagi node, dan yang dengan pembagian gain maksimum akan dipilih. Jadi pertanyaan saya adalah bagaimana jika saya menambahkan beberapa variabel derau ke dalam kumpulan data, akankah variabel derau ini mempengaruhi pemilihan variabel (untuk setiap pohon yang tumbuh)? Logika saya adalah karena variabel-variabel noise ini TIDAK memberikan pembagian keuntungan maksimum sama sekali, maka mereka tidak akan pernah dipilih sehingga mereka tidak mempengaruhi pertumbuhan pohon.

Jika jawabannya adalah ya, apakah benar bahwa "semakin banyak variabel semakin baik untuk XGBoost"? Jangan mempertimbangkan waktu pelatihan.

Juga, jika jawabannya adalah ya, maka apakah benar bahwa "kita tidak perlu menyaring variabel yang tidak penting dari model".

Terima kasih!

WCMC
sumber

Jawaban:

11

Logika saya adalah karena variabel-variabel noise ini TIDAK memberikan pembagian keuntungan maksimum sama sekali, maka mereka tidak akan pernah dipilih sehingga mereka tidak mempengaruhi pertumbuhan pohon.

Ini hanya benar untuk set data yang sangat besar dan hampir tak terbatas, di mana jumlah sampel dalam set pelatihan Anda memberikan cakupan yang baik dari semua variasi. Dalam praktiknya, dengan dimensi yang cukup Anda berakhir dengan banyak noise pengambilan sampel, karena cakupan contoh yang Anda miliki lebih lemah, semakin banyak dimensi yang dimiliki data Anda.

Kebisingan pada variabel lemah yang akhirnya berkorelasi secara kebetulan dengan variabel target dapat membatasi efektivitas meningkatkan algoritma, dan ini dapat lebih mudah terjadi pada pemisahan yang lebih dalam di pohon keputusan, di mana data yang dinilai telah dikelompokkan ke dalam subset kecil.

Semakin banyak variabel yang Anda tambahkan, semakin besar kemungkinan Anda akan mendapatkan variabel berkorelasi lemah yang kebetulan terlihat bagus untuk algoritma pemilihan split untuk beberapa kombinasi tertentu, yang kemudian menciptakan pohon yang mempelajari kebisingan ini alih-alih sinyal yang dimaksud, dan pada akhirnya menggeneralisasi dengan buruk.

Dalam praktiknya, saya menemukan XGBoost cukup kuat untuk noise dalam skala kecil. Namun, saya juga menemukan bahwa itu kadang-kadang akan memilih variabel rekayasa berkualitas rendah, dalam preferensi untuk data berkorelasi lebih baik, untuk alasan yang sama. Jadi ini bukan algoritma di mana "semakin banyak variabel semakin baik untuk XGBoost" dan Anda perlu peduli tentang kemungkinan fitur berkualitas rendah.

Neil Slater
sumber
sangat bagus. Terima kasih! Jadi menurut Anda pemilihan fitur sebelum memasang XGBoost diperlukan berdasarkan pengalaman Anda?
WCMC
@ Frank: Mungkin. Anda dapat memulai dengan fitur lengkap dan menggunakan laporan kepentingan variabel xgboost untuk membantu Anda. Namun, secara umum, XGBoost tidak sepenuhnya menyelamatkan Anda dari segala kekhawatiran yang biasa tentang pemilihan fitur dan rekayasa.
Neil Slater
Hai @Neil, silakan lihat datacience.stackexchange.com/questions/17288/… setiap kali Anda mendapat kesempatan. Terima kasih.
WCMC
@ Frank: Saya sudah melakukannya kemarin dan meninggalkan pertanyaan untuk klarifikasi karena angka-angkanya sepertinya sedikit.
Neil Slater
Hai @Neil, karena poster sebelumnya tidak menjawab pertanyaan Anda, saya memposting ulang di sini dengan proyek saya sendiri. Saya juga menyediakan kumpulan data dan skrip R di sana, yang saya harap akan lebih nyaman bagi orang lain untuk memahami masalahnya. Saya menghargai jika Anda ingin memberikan bantuan.
WCMC