자식 노드의 Gini 감소 및 Gini 불순물


15

임의 포리스트에 대한 Gini 기능 중요도 측정 작업을하고 있습니다. 따라서 노드 불순물의 Gini 감소를 계산해야합니다. 여기 내가 그렇게하는 방법이 있는데, 그것은 정의와 충돌을 일으키고 어딘가에 잘못해야한다고 제안합니다 ... :)

이진 트리의 경우 왼쪽 및 오른쪽 자식의 확률을 고려하여 노드 의 Gini 불순물을 계산할 수 있습니다 n.

i(n)=1pl2pr2

그리고 지니 감소 :

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

따라서 노드에서 110 개의 관측치가있는이 예의 경우 :

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

다음 과 같이 노드 의 Gini 감소를 계산합니다 .

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

그러나 Breiman 정의 (또는 CV에 대한이 답변 : CART를 사용할 때 "가변 중요성"을 측정 / 순위 지정하는 방법 이지만 참조 도서에 액세스 할 수는 없습니다)에 따르면 자손의 불순물 기준은 부모 보다 작아야합니다 마디:

중요도
변수 m에서 노드 분할이 이루어질 때마다 두 하위 노드에 대한 Gini 불순물 기준은 상위 노드보다 작습니다. 포리스트의 모든 트리에서 각 개별 변수에 대해 gini 감소를 더하면 순열 중요도 측정과 매우 일치하는 빠른 변수 중요도가 제공됩니다.

그렇지 않으면 부정적인 Gini 감소로 이어지기 때문에 ...

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

누군가가 내가 틀린 곳을 말할 수 있다면, 여기에 분명한 것을 놓친 것처럼 보이기 때문에 매우 감사 할 것입니다 ...

답변:


16

대상 클래스 변수를 전혀 사용하지 않았습니다. 다른 모든 불순물 기능과 같은 지니 불순물은 분할 후 출력의 불순물을 측정합니다. 당신이 한 일은 샘플 크기 만 사용하여 무언가를 측정하는 것입니다.

귀하의 경우에 대한 공식을 도출하려고합니다.

단순화를 위해 바이너리 분류 기가 있다고 가정하십시오. 와 나타 테스트 속성을 가진 C 클래스 속성이있는 C + , C -ACc+,c 값.

분할 초기 지니 지수 는 여기서, P ( +를 ) 이 데이터 포인트의 비율 인 C + 클래스 변수의 값.

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

이제 왼쪽 노드의 불순물은 I ( A r ) = 1입니다.

I(Al)=1P(Al+)2P(Al)2
여기서, P ( 리터 + )
I(Ar)=1P(Ar+)2P(Ar)2
P(Al+)클래스 변수 등에서 c + 값을 갖는 왼쪽 부분 집합의 데이터 포인트 비율입니다 .Ac+

이제 GiniGain의 최종 공식은 다음과 같습니다.

여기서 P L의 E F t이 경우의 비율이다 왼쪽 부분 집합의 경우 # | l |

나는나는나는()=나는()이자형에프나는()아르 자형나는h나는(아르 자형)
이자형에프(왼쪽 서브 세트에있는 인스턴스 수를A의 총 인스턴스 수로 나눈 값입니다.#||#||+#|아르 자형|

내 표기법이 향상 될 수 있다고 생각합니다. 나중에 더 많은 시간을 보내면 나중에 볼 것입니다.

결론

많은 수의 데이터 포인트 만 사용하는 것만으로는 충분하지 않으며, 불순물은 한 기능 (테스트 기능)이 다른 기능 (클래스 기능)의 분포를 얼마나 잘 재현 할 수 있는지를 의미합니다. 테스트 피처 분포는 사용한 숫자 (왼쪽, 오른쪽)를 생성하지만 수식에 클래스 피처의 분포는 사용되지 않습니다.

나중에 편집-감소 이유를 제시

이제 자식 노드의 gini 인덱스가 부모 노드보다 작은 이유를 입증하는 부분을 놓친 것을 알았습니다. 나는 완전한 증명이나 확인 된 것이 없지만 유효한 증거라고 생각합니다. 주제와 관련된 다른 중간 항목에 대해서는 기술 노트 : 분할 기준의 일부 특성-Leo Breiman을 확인할 수 있습니다. 이제 내 증거를 따릅니다.

우리가 이진 경우에 있다고 가정하고 노드의 모든 값을 한 쌍으로 완전히 설명 할 수 있다고 가정하십시오. (,)(,)

최상의 분할을 찾기 위해 테스트 기능에 따라 인스턴스를 정렬하고 가능한 모든 이진 분할을 시도합니다. 주어진 기능에 따라 정렬 된 인스턴스는 실제로 인스턴스의 순열입니다. 여기서 클래스는 첫 번째 클래스 또는 두 번째 클래스의 인스턴스로 시작합니다. 일반성을 잃지 않고 우리는 그것이 첫 번째 클래스의 인스턴스로 시작한다고 가정 할 것입니다 (이 경우가 아니라면 동일한 계산으로 미러 증명이 있습니다).

(1,0)(1,)h(left)=1(1/1)2(0/1)2=0. 왼쪽에는 gini 인덱스 값이 작습니다. 올바른 노드는 어떻습니까?

h(parent)=1(aa+b)2(ba+b)2
h(right)=1(a1(a1)+b)2(b(a1)+b)2

a0

이제 증명의 마지막 단계는 우리가 가진 데이터에 의해 지시 된 가능한 모든 분리 점을 고려하면서 가장 작은 집계 된 gini 지수를 갖는 것을 유지합니다. 즉, 우리가 선택한 최적이 내가 작게 한 사소한 것이 더 작습니다. 결국 gini 지수는 감소 할 것입니다.

마지막 결론으로, 다양한 분할이 상위 노드보다 큰 값을 줄 수 있다고해도, 우리가 선택한 노드는 그 중에서 가장 작고 또한 상위 gini 지수 값보다 작습니다.

도움이 되길 바랍니다.


정말 고마워, 당신은 내 두뇌를 잠금 해제했습니다 ... 사실, 회귀 트리를 다루고 있기 때문에 대상 클래스 변수를 사용하는 것이 순수한 분류 작업보다 덜 명확하게 나타났습니다. 그러나 이제는 완전히 의미가 있습니다.
Remi Mélisson

누락 된 부분을 포함하도록 답변을 업데이트했습니다.
라파 이오
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.