Saya sedang mencari penjelasan tentang betapa pentingnya variabel relatif dihitung dalam Gradient Boosted Trees yang tidak terlalu umum / sederhana seperti:
Langkah-langkah didasarkan pada berapa kali variabel dipilih untuk pemisahan, ditimbang oleh peningkatan kuadrat untuk model sebagai hasil dari setiap perpecahan, dan rata-rata di semua pohon . [ Elith et al. 2008, Panduan kerja untuk meningkatkan pohon regresi ]
Dan itu kurang abstrak dari:
Jika penjumlahannya melebihi nonterminal nodes dari -terminal node tree , adalah variabel pemisahan yang terkait dengan node , dan adalah peningkatan empiris yang sesuai dalam kuadrat kesalahan sebagai hasil dari pemisahan, didefinisikan sebagai , di mana masing-masing adalah sarana respons putri kiri dan kanan masing-masing, dan adalah jumlah bobot yang sesuai. J T v t t ^ i 2 t i 2 ( R l , R r ) = w l w r ¯ y l , ¯ y r wl,wr[ Friedman 2001, perkiraan fungsi Greedy: mesin peningkat gradien ]
Akhirnya, saya tidak menemukan Elemen Pembelajaran Statistik (Hastie et al. 2008) sangat membantu dibaca di sini, karena bagian yang relevan (10.13.1 halaman 367) rasanya sangat mirip dengan referensi kedua di atas (yang mungkin dijelaskan oleh fakta bahwa Friedman adalah rekan penulis buku).
PS: Saya tahu ukuran kepentingan variabel relatif diberikan oleh summary.gbm dalam paket gbm R. Saya mencoba menjelajahi kode sumber, tetapi sepertinya saya tidak dapat menemukan di mana perhitungan yang sebenarnya terjadi.
Brownie poin: Saya ingin tahu bagaimana mendapatkan plot ini di R.
Jawaban:
Saya akan menggunakan kode sklearn , karena umumnya jauh lebih bersih daripada
R
kode.Inilah implementasi properti feature_importances dari GradientBoostingClassifier (saya menghapus beberapa baris kode yang menghalangi hal-hal konseptual)
Ini cukup mudah dimengerti.
self.estimators_
adalah array yang berisi pohon individu di booster, sehingga loop untuk iterasi di atas pohon individu. Ada satu masalah denganini menangani kasus respons non-biner. Di sini kita cocokkan beberapa pohon di setiap tahap dengan cara satu lawan satu. Secara konseptual paling sederhana untuk fokus pada kasus biner, di mana jumlah memiliki satu ringkasan, dan ini adil
tree.feature_importances_
. Jadi dalam kasus biner, kita dapat menulis ulang semua ini sebagaiJadi, dengan kata lain, jumlah fitur penting dari masing-masing pohon, lalu bagi dengan jumlah total pohon . Tetap melihat bagaimana menghitung kepentingan fitur untuk satu pohon.
Perhitungan pentingnya pohon diimplementasikan pada tingkat cython , tetapi masih bisa ditindaklanjuti. Ini versi kode yang sudah dibersihkan
Ini sangat sederhana. Iterasi melalui simpul pohon. Selama Anda tidak berada di simpul daun, hitung penurunan tertimbang dalam kemurnian simpul dari pemisahan di simpul ini, dan berikan atribut pada fitur yang dipecah pada
Kemudian, setelah selesai, bagi semuanya dengan bobot total data (dalam kebanyakan kasus, jumlah pengamatan)
Patut diingat bahwa pengotor adalah nama umum untuk metrik untuk digunakan saat menentukan apa yang harus dibuat perpecahan saat menanam pohon. Dalam terang itu, kami hanya meringkas berapa banyak pemisahan pada setiap fitur memungkinkan kami untuk mengurangi pengotor di semua celah di pohon.
Dalam konteks meningkatkan gradien, pohon-pohon ini selalu pohon regresi (meminimalkan kesalahan kuadrat dengan rakus) cocok dengan gradien fungsi kerugian.
sumber