Gini azalması ve çocuk düğümlerinin Gini safsızlığı


15

Rastgele orman için Gini özelliği önem ölçüsü üzerinde çalışıyorum. Bu nedenle, düğüm safsızlığında Gini azalmasını hesaplamam gerekiyor. İşte böyle yapıyorum, bu tanımla çatışmaya yol açıyor, bir yerde yanlış olmam gerektiğini gösteriyor ... :)

Bir ikili ağaç için ve sol ve sağ çocukların olasılıkları göz önüne alındığında, düğümünün Gini safsızlığını hesaplayabilirim n:

i(n)=1pl2pr2

Ve Gini azalır:

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

Yani, bir düğüm üzerinde 110 gözlem içeren bu örnek için:

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

Düğüm için Gini azalmasını hesaplardım böyle :

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

Ama Breiman tanımını aşağıdaki (veya CV bu cevabı: CART kullanırken / rütbe "değişken önemi" nasıl değerlendirilmeli ama başvurulan kitaba erişimi olmayan), azalanı kirlilik kriter olmalıdır az ebeveyn daha düğüm:

Gini önemi
Değişken m'de bir düğümün bölünmesi her yapıldığında, iki inen düğüm için gini safsızlık kriteri ana düğümden daha azdır. Ormandaki tüm ağaçlar üzerinde her bir değişken için gini azalmaları toplanması, genellikle permütasyon önem ölçüsü ile çok tutarlı olan hızlı değişken bir önem verir.

Aksi takdirde, negatif Gini azalmasına neden olur ...

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

Birisi nerede olduğumu söyleyebilseydi, çok minnettar olurum çünkü burada belirgin bir şeyi özlediğim gibi görünüyor ...

Yanıtlar:


16

Hedef sınıf değişkenini hiç kullanmadınız. Gini safsızlığı diğer tüm safsızlık fonksiyonları gibi, bir bölünmeden sonra çıktıların safsızlığını ölçer. Yaptığınız şey, sadece örneklem büyüklüğü kullanarak bir şeyi ölçmektir.

Vakanız için formül türetmeye çalışıyorum.

Sadelik için bir ikili sınıflandırıcıya sahip olduğunuzu varsayalım. ile test niteliğini, C ile c + olan sınıf niteliğini belirtin , c -ACc+,c değerlerine .

Bölme öncesi ilk gini indeksi ; burada P ( A + ) , sınıf değişkeni için c + değerine sahip veri noktalarının oranıdır .

I(A)=1P(A+)2P(A)2
P(A+)c+

Şimdi, sol düğüm için safsızlık I ( A r ) = 1 - P ( A r + ) 2 - P ( A r - ) 2 burada p ( bir l + )

I(Al)=1P(Al+)2P(Al)2
I(Ar)=1P(Ar+)2P(Ar)2
P(Al+)sınıf değişkeninde c + değerine sahip sol alt kümesinden veri noktalarının oranıdır .Ac+

Şimdi GiniGain için son formül

burada p l e f t örneklerin oranıdır sol alt küme veya # | A l |

GiniGain(A)=I(A)pleftI(Al)prightI(Ar)
pleft(sol alt kümede kaç eşgörünümünA'dantoplam eşgörünüm sayısına bölümüdür.#|Al|#|Al|+#|Ar|A

Gösterimin geliştirilebileceğini hissediyorum, daha fazla zamanım olduğunda daha sonra izleyeceğim.

Sonuç

Sadece veri noktası sayısını kullanmak yeterli değildir, safsızlık, bir özelliğin (test özelliği) başka bir özelliğin (sınıf özelliği) dağılımını ne kadar iyi üretebileceği anlamına gelir. Test özelliği dağıtımı, kullandığınız sayıyı üretir (nasıl sola, nasıl sağa), ancak sınıf özelliğinin dağıtımı formüllerinizde kullanılmaz.

Daha sonra düzenleme - neden azaldığını kanıtlayın

Şimdi alt düğümdeki gini indeksinin neden üst düğümden daha az olduğunu kanıtlayan kısmı kaçırdığımı fark ettim. Tam bir kanıtım veya doğrulanmış bir kanıtım yok, ancak geçerli bir kanıt olduğunu düşünüyorum. Konuyla ilgili diğer enteresan şeyler için Teknik Not: Ayırma Kriterleri - Leo Breiman'ın Bazı Özellikleri'ni kontrol edebilirsiniz . Şimdi kanıtımı takip edecek.

(a,b)ab(a,b)

En iyi bölünmeyi bulmak için, örnekleri bir test özelliğine göre sıralarız ve olası tüm ikili bölünmeleri deneriz. Belirli bir özellik tarafından sıralanan, aslında sınıfların birinci sınıfın veya ikinci sınıfın bir örneğiyle başladığı örneklerin permütasyonudur. Genelliği kaybetmeden, birinci sınıfın bir örneğiyle başladığını varsayalım (eğer durum böyle değilse, aynı hesaplama ile bir ayna kanıtı var).

(1,0)(a1,b)h(left)=1(1/1)2(0/1)2=0. Yani sol tarafta daha küçük bir gini indeks değerine sahibiz. Doğru düğüme ne dersiniz?

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.


Thank you very much, you unlocked my brain... In fact, since I'm dealing with regression trees, using the target class variable appeared less obvious than for a pure classification task. But it now totally makes sense.
Remi Mélisson

I updated the answer to contain the missing parts.
rapaio
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.