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?
clustering
python
k-means
scikit-learn
metric
coçar, arranhão
fonte
fonte
python
.Respostas:
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.Eu= ∑Eu( d( i , c r ) ) c r d
Agora, a fórmula da estatística de gap envolve ondeDré a soma das distâncias ao quadrado entre todos os pontos no clusterr.
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.+ c - c c r c Wk
Eu ainda tenho duas perguntas:
fonte