Saat ini saya menggunakan XGBoost pada kumpulan data dengan 21 fitur (dipilih dari daftar sekitar 150 fitur), kemudian dikodekan satu kali untuk mendapatkan ~ 98 fitur. Beberapa dari 98 fitur ini agak redundan, misalnya: variabel (fitur) juga muncul sebagai B danC .
Pertanyaan saya adalah:
- Bagaimana ( Jika? ) Boosted Decision Trees menangani multicollinearity?
- Bagaimana keberadaan multikolinearitas memengaruhi prediksi jika tidak ditangani?
Dari apa yang saya pahami, model tersebut belajar lebih dari satu pohon dan prediksi akhir didasarkan pada sesuatu seperti "jumlah tertimbang" dari prediksi individu. Jadi jika ini benar, maka Boosted Decision Trees harus dapat menangani saling ketergantungan antar variabel.
Juga, pada catatan terkait - bagaimana objek kepentingan variabel dalam XGBoost berfungsi?
feature-selection
correlation
xgboost
gbm
pengguna140323
sumber
sumber
Jawaban:
Pohon keputusan pada dasarnya kebal terhadap multi-collinearity. Misalnya, jika Anda memiliki 2 fitur yang berkorelasi 99%, ketika memutuskan split, pohon hanya akan memilih salah satu dari mereka. Model lain seperti regresi logistik akan menggunakan kedua fitur tersebut.
Karena pohon yang dikuatkan menggunakan pohon keputusan individu, mereka juga tidak terpengaruh oleh multi-collinearity. Namun, ini merupakan praktik yang baik untuk menghapus semua fitur yang berlebihan dari setiap dataset yang digunakan untuk pelatihan, terlepas dari algoritma model. Dalam kasus Anda karena Anda memperoleh fitur baru, Anda dapat menggunakan pendekatan ini, mengevaluasi pentingnya setiap fitur dan hanya mempertahankan fitur terbaik untuk model akhir Anda.
Matriks penting dari model xgboost sebenarnya adalah objek data.table dengan kolom pertama berisi daftar semua fitur yang sebenarnya digunakan pada pohon yang dikuatkan. Kolom kedua adalah metrik Penguatan yang menyiratkan kontribusi relatif dari fitur yang sesuai dengan model yang dihitung dengan mengambil kontribusi setiap fitur untuk setiap pohon dalam model. Nilai yang lebih tinggi dari metrik ini bila dibandingkan dengan fitur lain menyiratkan bahwa lebih penting untuk menghasilkan prediksi.
sumber
Saya ingin tahu tentang hal ini dan melakukan beberapa tes.
Saya telah melatih model pada dataset berlian, dan mengamati bahwa variabel "x" adalah yang paling penting untuk memprediksi apakah harga berlian lebih tinggi dari ambang tertentu. Kemudian, saya telah menambahkan beberapa kolom yang sangat berkorelasi dengan x, menjalankan model yang sama, dan mengamati nilai yang sama.
Tampaknya ketika korelasi antara dua kolom adalah 1, xgboost menghapus kolom tambahan sebelum menghitung model, sehingga kepentingannya tidak terpengaruh. Namun, ketika Anda menambahkan kolom yang sebagian berkorelasi dengan yang lain, dengan demikian dengan koefisien yang lebih rendah, pentingnya variabel asli x diturunkan.
Sebagai contoh jika saya menambahkan variabel xy = x + y, pentingnya x dan y berkurang. Demikian pula, pentingnya x berkurang jika saya menambahkan variabel baru dengan r = 0,4, 0,5 atau 0,6, meskipun hanya sedikit.
Saya pikir bahwa collinearity bukan masalah untuk meningkatkan ketika Anda menghitung keakuratan model, karena pohon keputusan tidak peduli yang mana salah satu variabel yang digunakan. Namun itu mungkin mempengaruhi pentingnya variabel, karena menghapus salah satu dari dua variabel yang berkorelasi tidak memiliki dampak besar pada keakuratan model, mengingat yang lain berisi informasi yang sama.
Mengevaluasi model pada data berlian
Kami memperkirakan apakah harga lebih tinggi dari 400, mengingat semua variabel numerik tersedia (karat, kedalaman, tabel, x, y, x)
Perhatikan bahwa x adalah variabel yang paling penting, dengan skor gain penting 0,375954.
Model dilatih tentang Diamonds, menambahkan variabel dengan r = 1 hingga x
Di sini kita menambahkan kolom baru, yang bagaimanapun tidak menambahkan informasi baru, karena berkorelasi sempurna dengan x.
Perhatikan bahwa variabel baru ini tidak ada dalam output. Tampaknya xgboost secara otomatis menghapus variabel berkorelasi sempurna sebelum memulai perhitungan. Keuntungan penting x adalah sama, 0,3759.
Model dilatih tentang Diamonds, menambahkan kolom untuk x + y
Kami menambahkan kolom baru xy = x + y. Ini sebagian berkorelasi dengan x dan y.
Perhatikan bahwa pentingnya x dan y sedikit berkurang, dari 0,3759 menjadi 0,3592 untuk x, dan dari 0,116 menjadi 0,079 untuk y.
Model dilatih tentang data Diamonds, dimodifikasi menambahkan kolom yang berlebihan
Kami menambahkan tiga kolom baru yang berkorelasi dengan x (r = 0,4, 0,5 dan 0,6) dan melihat apa yang terjadi.
Perhatikan bahwa pentingnya x akan berkurang, turun dari 0,3759 ke 0,279.
sumber
Ada jawaban dari Tianqi Chen (2018).
Untuk meringkas, Xgboost tidak secara acak menggunakan fitur yang berkorelasi di setiap pohon, yang model hutan acak menderita dari situasi seperti itu.
Referensi :
Tianqi Chen, Michaël Benesty, Tong He. 2018. "Memahami Kumpulan Data Anda dengan Xgboost." Https://cran.r-project.org/web/packages/xgboost/vignettes/discoverYourData.html#numeric-vs-categorical-variables .
sumber
Sebuah komentar pada jawaban Sandeep: Dengan asumsi 2 fitur Anda sangat kolinear (katakanlah sama dengan 99% waktu) Memang hanya 1 fitur yang dipilih pada setiap pemisahan, tetapi untuk pemisahan berikutnya, xgb dapat memilih fitur lainnya. Oleh karena itu, peringkat fitur xgb mungkin akan memberi peringkat fitur 2 colinear secara merata. Tanpa pengetahuan sebelumnya atau pemrosesan fitur lainnya, Anda hampir tidak memiliki sarana dari peringkat yang disediakan ini untuk mendeteksi bahwa 2 fitur tersebut adalah colinear.
Sekarang, untuk kepentingan relatif yang menghasilkan xgboost, itu harus sangat mirip (atau mungkin persis sama) dengan gradien sklearn yang ditingkatkan peringkat pohon. Lihat di sini untuk penjelasan.
sumber