Você simplesmente não usou a variável de classe de destino. A impureza de Gini, como todas as outras funções de impureza, mede a impureza dos resultados após uma divisão. O que você fez é medir algo usando apenas o tamanho da amostra.
Eu tento derivar a fórmula para o seu caso.
Suponha que, por simplicidade, você tenha um classificador binário. Denote com o atributo de teste, com o atributo de classe que possui valores .C c + , c -ACc+,c−
O índice gini inicial antes da divisão é dado por
que é a proporção de pontos de dados que têm valor para a classe variável. P ( A + ) c +
I(A)=1−P(A+)2−P(A−)2
P(A+)c+
Agora, a impureza para o nó esquerdo seria
onde é a proporção de pontos de dados do subconjunto esquerdo de que têm valor na variável de classe, etc.
I(Al)=1−P(Al+)2−P(Al−)2
I(Ar)=1−P(Ar+)2−P(Ar−)2
P(Al+)Ac+
Agora, a fórmula final para o GiniGain seria
GiniGain(A)=I(A)−pleftI(Al)−prightI(Ar)
que é a proporção de instâncias para o subconjunto esquerdo ou (quantas instâncias estão em subconjunto esquerdo dividido pelo número total de instâncias de .
pleft#|Al|#|Al|+#|Ar|UMA
Eu sinto que minha notação pode ser melhorada, observarei mais tarde quando tiver mais tempo.
Conclusão
Usar apenas um número de pontos de dados não é suficiente; impureza significa quão bem um recurso (recurso de teste) é capaz de reproduzir a distribuição de outro recurso (recurso de classe). A distribuição do recurso de teste produz o número que você usou (como à esquerda, como à direita), mas a distribuição do recurso de classe não é usada em suas fórmulas.
Edição posterior - prove por que diminui
Agora notei que perdi a parte que prova por que sempre o índice gini no nó filho é menor que no nó pai. Não tenho uma prova completa ou verificada, mas acho que é uma prova válida. Para outra coisa interessante relacionada ao tópico, consulte Nota técnica: algumas propriedades dos critérios de divisão - Leo Breiman . Agora seguirá minha prova.
Suponha-se que são, no caso binário, e todos os valores em um nó pode ser completamente descrita por um par com o significado de ocorrências da primeira classe, e instâncias da segunda classe. Podemos afirmar que no nó pai temos instâncias .( a , b )umab( a , b )
Para encontrar a melhor divisão, classificamos as instâncias de acordo com um recurso de teste e tentamos todas as divisões binárias possíveis. Classificadas por um determinado recurso é na verdade uma permutação de instâncias, nas quais as classes começam com uma instância da primeira ou da segunda classe. Sem perder a generalidade, suporemos que ela comece com uma instância da primeira classe (se esse não for o caso, teremos uma prova de espelho com o mesmo cálculo).
A primeira divisão a tentar está nas instâncias esquerda e direita . Como o índice gini desses possíveis candidatos para nós filhos esquerdo e direito é comparado com o nó pai? Obviamente, à esquerda, temos . Portanto, no lado esquerdo, temos um valor menor do índice gini. E o nó certo?(1,0)(a−1,b)h(left)=1−(1/1)2−(0/1)2=0
h(parent)=1−(aa+b)2−(ba+b)2
h(right)=1−(a−1(a−1)+b)2−(b(a−1)+b)2
Considerando que é maior ou igual a (caso contrário, como poderíamos separar uma instância da primeira classe no nó esquerdo?) E após a simplificação, é simples ver que o índice gini para o nó direito tem um valor menor do que para o nó nó pai.a0
Agora, o estágio final da prova é o de que, embora considerando todos os pontos de divisão possíveis ditados pelos dados que temos, mantemos o que possui o menor índice de gini agregado, o que significa que o melhor que escolhemos é menor ou igual ao trivial que eu provei que é menor. O que conclui que no final o índice gini diminuirá.
Como conclusão final, devemos observar que, mesmo que várias divisões possam fornecer valores maiores que o nó pai, o que escolhermos será o menor dentre eles e também menor que o valor do índice gini pai.
Espero que ajude.