Gini berkurang dan Gini ketidakmurnian simpul anak

15

Saya sedang mengerjakan ukuran kepentingan fitur Gini untuk hutan acak. Oleh karena itu, saya perlu menghitung penurunan Gini dalam ketidakmurnian simpul. Inilah cara saya melakukannya, yang mengarah pada konflik dengan definisi tersebut, menunjukkan bahwa saya pasti salah di suatu tempat ... :)

Untuk pohon biner, dan mengingat probabilitas anak-anak kiri dan kanan, saya dapat menghitung ketidakmurnian Gini dari sebuah simpul :n

i(n)=1pl2pr2

Dan penurunan Gini:

Δi(n)=i(n)pli(nl)pri(nr)

Jadi, untuk contoh ini dengan 110 pengamatan pada sebuah simpul:

- node (110)
   - left (100)
      - left_left (60)
      - left_right (40)
   - right (10)
      - right_left (5)
      - right_right (5)

Saya akan menghitung penurunan Gini untuk simpul seperti ini:

i(left)=1(60/100)²(40/100)²=0.48i(right)=1(5/10)²(5/10)²=0.50i(node)=1(100/110)²(10/110)²=0.16

Tetapi mengikuti definisi Breiman (atau jawaban ini di CV: Bagaimana mengukur / memberi peringkat "variabel penting" ketika menggunakan CART , tetapi saya tidak memiliki akses ke buku yang dirujuk), kriteria kenajisan dari keturunan harus lebih kecil dari induknya. simpul:

Pentingnya gini
Setiap kali pemisahan simpul dilakukan pada variabel m kriteria pengotor gini untuk dua simpul turunan lebih kecil dari simpul induk. Menambahkan gini berkurang untuk setiap variabel individu atas semua pohon di hutan memberikan variabel cepat penting yang sering sangat konsisten dengan ukuran kepentingan permutasi.

Karena jika tidak, itu mengarah ke penurunan Gini negatif ...

Δi(node)=i(node)(100/110)i(left)(10/110)i(right)=0.32

Jadi, jika seseorang dapat mengetahui di mana saya salah, saya akan sangat berterima kasih karena sepertinya saya kehilangan sesuatu yang jelas di sini ...

Remi Mélisson
sumber

Jawaban:

16

Anda sama sekali tidak menggunakan variabel kelas target sama sekali. Gini pengotor seperti semua fungsi pengotor lainnya, mengukur pengotor dari output setelah split. Apa yang Anda lakukan adalah mengukur sesuatu hanya dengan menggunakan ukuran sampel.

Saya mencoba untuk mendapatkan formula untuk kasus Anda.

Misalkan untuk kesederhanaan Anda telah memiliki classifier biner. Ditunjukkan dengan sebagai atribut uji, dengan C atribut kelas yang memiliki nilai c + , c - .SEBUAHCc+,c-

Indeks gini awal sebelum pemisahan diberikan oleh mana P ( A + ) adalah proporsi titik data yang memiliki nilai c + untuk variabel kelas.

saya(SEBUAH)=1-P(SEBUAH+)2-P(SEBUAH-)2
P(SEBUAH+)c+

Sekarang, pengotor untuk simpul kiri adalah I ( A r ) = 1 - P ( A r + ) 2 - P ( A r - ) 2 di mana P ( A l + )

saya(SEBUAHl)=1-P(SEBUAHl+)2-P(SEBUAHl-)2
saya(SEBUAHr)=1-P(SEBUAHr+)2-P(SEBUAHr-)2
P(SEBUAHl+)adalah proporsi titik data dari subset kiri yang memiliki nilai c + dalam variabel kelas, dll.SEBUAHc+

Sekarang formula final untuk GiniGain adalah

mana p l e f t adalah proporsi dari instance untuk subset kiri, atau # | A l |

GiniGain(A)=I(A)pleftI(Al)prightI(Ar)
pleft(berapa banyak contoh yang di bagian kiri dibagi dengan jumlah total kasus dariA.#|Al|#|Al|+#|Ar|A

Saya merasa notasi saya dapat ditingkatkan, saya akan menonton nanti ketika saya akan memiliki lebih banyak waktu.

Kesimpulan

Hanya menggunakan jumlah titik data saja tidak cukup, pengotor berarti seberapa baik satu fitur (fitur uji) dapat mereproduksi distribusi fitur lain (fitur kelas). Distribusi fitur tes menghasilkan angka yang Anda gunakan (cara ke kiri, cara ke kanan), tetapi distribusi fitur kelas tidak digunakan dalam rumus Anda.

Kemudian edit - cari alasannya berkurang

Sekarang saya perhatikan bahwa saya melewatkan bagian yang membuktikan mengapa selalu indeks gini pada simpul anak kurang dari pada simpul orangtua. Saya tidak memiliki proove lengkap atau yang diverifikasi, tetapi saya pikir itu adalah bukti yang valid. Untuk hal campur tangan lain yang terkait dengan topik Anda dapat memeriksa Catatan Teknis: Beberapa Properti Kriteria Membelah - Leo Breiman . Sekarang akan mengikuti bukti saya.

(a,b)ab(a,b)

Untuk menemukan pemecahan terbaik, kami mengurutkan instance berdasarkan dengan fitur tes dan kami mencoba semua pemecahan biner yang mungkin. Diurutkan berdasarkan fitur yang diberikan sebenarnya adalah permutasi dari instance, di mana kelas dimulai dengan instance dari kelas pertama atau dari kelas kedua. Tanpa menghilangkan sifat umum, kita akan mengira bahwa itu dimulai dengan turunan dari kelas pertama (jika ini bukan masalahnya, kita memiliki bukti cermin dengan perhitungan yang sama).

(1,0)(a1,b)h(left)=1(1/1)2(0/1)2=0. Jadi di sisi kiri kita memiliki nilai indeks gini yang lebih kecil. Bagaimana dengan simpul yang benar?

h(parent)=1(aa+b)2(ba+b)2
h(right)=1(a1(a1)+b)2(b(a1)+b)2

Considering that a is greater or equal than 0 (since otherwise how could we separate an instance of the first class in the left node?) and after simplification it's simple to see that the gini index for the right node has a smaller value than for the parent node.

Now the final stage of the proof is to node that while considering all the possible split points dictated by the data we have, we keep the one which has the smallest aggregated gini index, which means that the optimum we choose is less or equal than the trivial one which I prooved that is smaller. Which concludes that in the end the gini index will decrease.

As a final conclusion we have to note even if various splits can give values bigger that parent node, the one that we choose will be the smallest among them and also smaller that the parent gini index value.

Hope it helps.

rapaio
sumber
Terima kasih banyak, Anda membuka kunci otak saya ... Bahkan, karena saya sedang berurusan dengan pohon regresi, menggunakan variabel kelas target tampak kurang jelas daripada untuk tugas klasifikasi murni. Tapi sekarang benar-benar masuk akal.
Remi Mélisson
Saya memperbarui jawaban untuk memuat bagian yang hilang.
rapaio