A. Liaw의 R에있는 randomForest 패키지는 c 코드 (번역 된) 일부 포트란 코드와 R 래퍼 코드가 혼합 된 원본 코드의 포트입니다. 중단 점과 mtry 변수에서 전체적으로 최상의 분할을 결정하기 위해 코드는 gini-gain과 유사한 점수 함수를 사용합니다.
GiniGain(N,X)=Gini(N)−|N1||N|Gini(N1)−|N2||N|Gini(N2)
여기서 소정의 기능이고, N은 분할이 수행되는 한 노드이며, N (1) 및 N 2 분할에 의해 생성 된 두 개의 자식 노드이다 N . | . | 노드의 요소 수입니다.XNN1N2N|.|
그리고 . 여기서 K 는 노드의 범주 수입니다.Gini(N)=1−∑Kk=1p2kK
그러나 적용된 스코어링 기능은 정확히 동일하지는 않지만 계산적으로 효율적인 버전입니다. 및 | N | 비교 된 모든 분할에 대해 일정하므로 생략됩니다.Gini(N)
또한 node (1)의 제곱 유병률의 합이 |N2||N|Gini(N2)∝|N2|Gini(N2)=|N2|(1−∑Kk=1p2k)=|N2|∑nclass22,k|N2|2
여기서 보조 노드 1. 공지의 대상 클래스 k의 클래스 카운트 | N 2 | 노미 네이터와 분모 모두에 배치됩니다.nclass1,k|N2|
사소한 일정 제거 방정식에서 출발하는 가장 분할 결정은 노드가 제곱 클래스 유병률의 가중 합계의 크기를 최대화하기 위해되도록을 ...1−
점수 =
=Σ K의 K = 1 NCLS(S) (2) (2) , K|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