Gói RandomForest trong R của A. Liaw là một cổng của mã gốc là sự pha trộn của mã c (đã được dịch) một số mã fortran còn lại và mã trình bao bọc R. Để quyết định sự phân chia tốt nhất tổng thể giữa các điểm dừng và trên các biến mtry, mã sử dụng chức năng chấm điểm tương tự như gini-gain:
GiniGain(N,X)=Gini(N)−|N1||N|Gini(N1)−|N2||N|Gini(N2)
Trong trường hợp là một tính năng nhất định, N là nút mà chia tay là được thực hiện, và N 1 và N 2 là hai nút con được tạo ra bằng cách tách N . | . | là số phần tử trong một nút.XNN1N2N|.|
Và , nơi K là số chủng loại trong nútGini(N)=1−∑Kk=1p2kK
Gini(N)
|N2||N|Gini(N2)∝|N2|Gini(N2)=|N2|(1−∑Kk=1p2k)=|N2|∑nclass22,k|N2|2
where nclass1,k is the class count of target-class k in daughter node 1. Notice |N2| is placed both in nominator and denominator.
removing the trivial constant 1− from equation such that best split decision is to maximize nodes size weighted sum of squared class prevalence...
score=
|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
The implementation also allows for classwise up/down weighting of samples. Also very important when the implementation update this modified gini-gain, moving a single sample from one node to the other is very efficient. The sample can be substracted from nominators/denominators of one node and added to the others.
I wrote a prototype-RF some months ago, ignorantly recomputing from scratch gini-gain for every break-point and that was slower :)
If several splits scores are best, a random winner is picked.
This answer was based on inspecting source file "randomForest.x.x.tar.gz/src/classTree.c" line 209-250