A. Liaw tarafından R'deki randomForest paketi, orijinal kodun, kalan bazı fortran kodu ve R sarıcı kodunun bir c-kodu (çevrilmiş) karışımı olan bir portudur. Kırılma noktaları ve mtry değişkenleri arasındaki en iyi bölünmeye karar vermek için kod, gini kazanımına benzer bir puanlama işlevi kullanır:
GiniGain(N,X)=Gini(N)−|N1||N|Gini(N1)−|N2||N|Gini(N2)
belirli bir özellik olduğu durumlarda , ayrıştırmanın yapılacağı düğümdür ve ve , ayrılmasıyla oluşturulan iki alt düğümdür . , bir düğümdeki öğelerin sayısıdır.N N 1 N 2 N | . |XNN1N2N|.|
Ve , burada düğümdeki kategori sayısıdır KGini(N)=1−∑Kk=1p2kK
Ancak uygulanan puanlama işlevi tam olarak aynı değildir, bunun yerine eşdeğer daha hesaplamalı verimli bir sürümdür. ve | N | karşılaştırılan tüm bölünmeler için sabittir ve bu nedenle atlanır.Gini(N)
Ayrıca bir düğümdeki (1) kare yaygınlık toplamı|N2||N|Gini(N2)∝|N2|Gini(N2)=|N2|(1−∑Kk=1p2k)=|N2|∑nclass22,k|N2|2
burada , 1. düğümdeki hedef-sınıf k'nin sınıf sayısıdır. Uyarıhem aday hem de paydaya yerleştirilir.nclass1,k|N2|
önemsiz sabiti denklemden çıkarmak, böylece en iyi bölünmüş karar, kare sınıfı yaygınlık düğümleri boyut ağırlıklı toplamını en üst düzeye çıkarmaktır ...1−
puan =
|N1|∑Kk=1p21,k+|N2|∑Kk=1p22,k=|N1|∑Kk=1nclass21,k|N1|2+|N2|∑Kk=1nclass22,k|N2|2
=∑Kk=1nclass22,k1|N1|−1+∑Kk=1nclass22,k1|N1|−2
=nominator1/denominator1+nominator2/denominator2
Uygulama aynı zamanda numunelerin klasik olarak yukarı / aşağı ağırlıklandırılmasına da izin verir. Uygulama, bu modifiye gini kazanımını güncellediğinde çok önemlidir, tek bir numuneyi bir düğümden diğerine taşımak çok etkilidir. Örnek bir düğümün adaylayıcılarından / paydalarından çıkarılabilir ve diğerlerine eklenebilir. Birkaç ay önce bir prototip RF yazdım, cahil olarak her kırılma noktası için sıfır gini kazanımından yeniden hesapladım ve bu daha yavaştı :)
Eğer birkaç bölme skoru en iyisi ise, rastgele bir kazanan seçilir.
Bu yanıt, kaynak dosya "randomForest.xxtar.gz / src / classTree.c" satırının 209-250 incelenmesine dayanıyordu.