Fórmula de inércia de cluster no scikit learn

9

Gostaria de codificar um kmeans agrupado em python usando pandas e scikit learn. Para selecionar o bom k, gostaria de codificar a estatística Gap de Tibshirani e al 2001 ( pdf ).

Gostaria de saber se poderia usar o resultado de inércia_ do scikit e adaptar a fórmula estatística de gap sem precisar recodificar todo o cálculo de distâncias.

Alguém conhece a fórmula de inércia usada no scikit / conhece uma maneira fácil de recodificar a estatística de gap usando funções de distância de alto nível?

coçar, arranhão
fonte
Eu acho que essa pergunta tem conteúdo estatístico suficiente para ser abordada no CV, mas observe que também requer programação bastante sofisticada e conhecimento em Python. Pode ser difícil obter uma boa resposta. Você também pode solicitar / estar disposto a aceitar o pseudocódigo , e / ou pode dividir essa pergunta em 2 partes, 1 aqui sobre os aspectos estatísticos e 1 parte no Stack Overflow sobre os aspectos de programação do Python. (Ou talvez não, não tenho certeza, mas só quero lhe dar um aviso justo; veremos como isso vai acontecer.)
gung - Reinstate Monica
11
Esta questão precisa que o termo "inércia" seja definido. Parece que foi inventado por dentro python.
precisa saber é o seguinte

Respostas:

6

Acho que encontrei minha resposta para o agrupamento kmeans:

Observando o código fonte do git, descobri que, para o scikit learn, a inércia é calculada como a soma da distância ao quadrado de cada ponto até o centróide mais próximo, ou seja, seu cluster designado. Então onde c r é o centróide do cluster designado ed é a distância ao quadrado. I=i(d(i,cr))crd

Agora, a fórmula da estatística de gap envolve ondeDré a soma das distâncias ao quadrado entre todos os pontos no clusterr.

Wk=r=1k1(2nr)Dr
Drr

Introduzindo , - c na fórmula da distância ao quadrado ( c sendo o centróide das coordenadas do cluster r ), tenho um termo que corresponde à inércia (como no scikit) + um termo que desaparece se cada c for o baricentro de cada cluster (que deveria estar em kmeans). Então eu acho que W k é de fato inércia.+cccrcWk

Eu ainda tenho duas perguntas:

  1. Você acha que meu cálculo está correto? (Por exemplo, não sei se isso vale para cluster hierárquico.)
  2. Se estou correto acima, codifiquei a estatística de gap (como diferença de inércia do log entre estimativa e cluster) e ela apresenta um desempenho ruim, especialmente no conjunto de dados da íris, alguém já tentou?
coçar, arranhão
fonte
2
É melhor não fazer perguntas em suas respostas. Se essa não é realmente a resposta para sua pergunta, mas apenas uma solução parcial para esclarecer a pergunta real, seria melhor editar sua pergunta e colar essas informações.
gung - Reinstate Monica
11
@ Scratch Você já conseguiu uma implementação em python da estatística de gap para trabalhar no conjunto de dados Iris? Estou lutando com o mesmo problema.
Zelazny7
Sim, eu codifiquei um há alguns meses. Como posso lhe enviar isso?
Raspe
11
Wk=r=1kDr(2nr)