Bagaimana menafsirkan output dari XGBoost pentingnya?

37

Saya menjalankan model xgboost. Saya tidak tahu persis bagaimana menafsirkan output dari xgb.importance.

Apa arti dari Penguatan, Penutupan, dan Frekuensi dan bagaimana kita menafsirkannya?

Juga, apa arti Split, RealCover, dan RealCover%? Saya punya beberapa parameter tambahan di sini

Apakah ada parameter lain yang dapat memberi tahu saya lebih lanjut tentang pentingnya fitur?

Dari dokumentasi R, saya memiliki beberapa pemahaman bahwa Gain adalah sesuatu yang mirip dengan Informasi gain dan Frekuensi adalah berapa kali fitur digunakan di semua pohon. Saya tidak tahu apa Sampul itu.

Saya menjalankan kode contoh yang diberikan dalam tautan (dan juga mencoba melakukan hal yang sama pada masalah yang sedang saya kerjakan), tetapi definisi split yang diberikan di sana tidak cocok dengan angka yang saya hitung.

importance_matrix

Keluaran:

           Feature         Gain        Cover    Frequence
  1:            xxx 2.276101e-01 0.0618490331 1.913283e-02
  2:           xxxx 2.047495e-01 0.1337406946 1.373710e-01
  3:           xxxx 1.239551e-01 0.1032614896 1.319798e-01
  4:           xxxx 6.269780e-02 0.0431682707 1.098646e-01
  5:          xxxxx 6.004842e-02 0.0305611830 1.709108e-02

214:     xxxxxxxxxx 4.599139e-06 0.0001551098 1.147052e-05
215:     xxxxxxxxxx 4.500927e-06 0.0001665320 1.147052e-05
216:   xxxxxxxxxxxx 3.899363e-06 0.0001536857 1.147052e-05
217: xxxxxxxxxxxxxx 3.619348e-06 0.0001808504 1.147052e-05
218:  xxxxxxxxxxxxx 3.429679e-06 0.0001792233 1.147052e-05
Ethan
sumber

Jawaban:

40

Dari pertanyaan Anda, saya berasumsi bahwa Anda menggunakan xgboost agar sesuai dengan pohon yang dikuatkan untuk klasifikasi biner. Matriks kepentingan sebenarnya adalah objek data.table dengan kolom pertama berisi daftar semua fitur yang benar-benar digunakan pada pohon yang dikuatkan.

Arti dari tabel data penting adalah sebagai berikut:

  1. The Gain menyiratkan kontribusi relatif dari fitur yang sesuai dengan model dihitung dengan mengambil kontribusi masing-masing 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.
  2. The Sampul metrik berarti jumlah relatif dari pengamatan yang berkaitan dengan fitur ini. Misalnya, jika Anda memiliki 100 pengamatan, 4 fitur dan 3 pohon, dan anggap fitur1 digunakan untuk menentukan simpul daun untuk masing-masing 10, 5, dan 2 pengamatan di tree1, tree2 dan tree3; maka metrik akan menghitung sampul untuk fitur ini sebagai 10 + 5 + 2 = 17 pengamatan. Ini akan dihitung untuk semua 4 fitur dan sampul akan dinyatakan dalam persentase untuk metrik sampul semua fitur.
  3. The Frekuensi (/ 'Frequence') adalah persentase yang mewakili jumlah relatif dari kali fitur tertentu terjadi pada pohon-pohon model. Dalam contoh di atas, jika feature1 terjadi dalam 2 splits, 1 split dan 3 splits di masing-masing tree1, tree2 dan tree3; maka bobot untuk fitur1 akan menjadi 2 + 1 + 3 = 6. Frekuensi untuk fitur1 dihitung sebagai persentase beratnya di atas bobot semua fitur.

Gain adalah atribut yang paling relevan untuk menafsirkan kepentingan relatif setiap fitur.

Semua ukuran relatif dan karenanya semuanya berjumlah satu, contoh dari model xgboost yang pas di R adalah:

> sum(importance$Frequence)
[1] 1
> sum(importance$Cover)
[1] 1
> sum(importance$Gain)
[1] 1
Sandeep S. Sandhu
sumber
1
Penutup hanya dihitung berdasarkan pada leaf leaf atau pada semua splits?
fanfabbb
3

Terima kasih Sandeep atas jawaban terperinci Anda. Saya ingin memperbaiki bahwa penutup dihitung di semua belahan dan bukan hanya simpul daun.

Mari kita lihat contoh sederhana dengan data yang disediakan oleh pustaka xgboost.

library('xgboost')

data(agaricus.train, package='xgboost')
data(agaricus.test, package='xgboost')

train <- agaricus.train
test <- agaricus.test

X = train$data

y = train$label

bst <- xgboost(data = X, label = y, max.depth = 2,
           eta = 1, nthread = 2, nround = 2,objective = "binary:logistic",
           reg_lambda = 0, reg_alpha = 0)

xgb.model.dt.tree(agaricus.train$data@Dimnames[[2]], model = bst)

xgb.importance(agaricus.train$data@Dimnames[[2]], bst)

Keluaran -

Tumpukan pohon

Matriks kepentingan

Mari kita coba menghitung sampul bau = tidak ada dalam matriks kepentingan (0.495768965) dari tumpukan pohon.

Sampul setiap perpecahan di mana bau = tidak digunakan adalah 1628.2500 di Node ID 0-0 dan 765.9390 di Node ID 1-1.

Total tutupan semua perpecahan (menjumlahkan di seluruh kolom penutup dalam tumpukan pohon) = 1628.2500 * 2 + 786.3720 * 2

Penutup bau = tidak ada dalam matriks pentingnya = (1628.2500 + 765.9390) / (1628.2500 * 2 + 786.3720 * 2)

Karena itu kami yakin bahwa tutupan dihitung di semua belahan!

Natesh Arunachalam
sumber