Пакет randomForest в R від A. Liaw - це порт вихідного коду, що представляє собою суміш c-коду (перекладеного), який залишився код fortran та код R обгортки. Для вирішення загального найкращого поділу на точки перерви та між змінними mtry, код використовує функцію оцінки, схожу на gini-посилення:
GiniGain(N,X)=Gini(N)−|N1||N|Gini(N1)−|N2||N|G i n i(N2)
ХNN1N2N| . |
G i n i (N) = 1 - ∑Кk = 1p2кК
G i n i (N)
| N2||N|G i n i ( N2) ∝ | N2| Gini( N2) = | N2| (1- ∑Кk = 1p2к) = | N2| ∑ n c l a s s22 , к| N2|2
n c l a s s1 , к| N2|
1 -
| N1| ∑Кk = 1p21 , к+ | N2| ∑Кk = 1p22 , к= | N1| ∑Кk = 1n c l a s s21 , к| N1|2+ | N2| ∑Кk = 1n c l a s s22 , к| N2|2
= ∑Кk = 1n c l a s s22 , к1| N1|- 1+ ∑Кk = 1n c l a s s22 , к1| N1|- 2
= n o m i n a t o r1/ дe n o m i n a t o r1+ n o m i n a t o r2/ дe n o m i n a t o r2
Реалізація також дозволяє здійснювати класичне зважування зразків вгору / вниз. Також дуже важливо, коли впровадження оновлення цього модифікованого gini-посилення, переміщення одного зразка з одного вузла в інший є дуже ефективним. Зразок можна віднести від номінаторів / знаменників одного вузла та додати до інших. Я писав прототип-RF кілька місяців тому, необізнано перераховуючи з нуля gini-посилення для кожного перелому, і це було повільніше :)
Якщо кілька балів за розділення найкращі, вибирається випадковий переможець.
Ця відповідь ґрунтувалася на перевірці вихідного файлу "randomForest.xxtar.gz / src / classTree.c" рядка 209-250