Estou tentando usar o gráfico de silhueta para determinar o número de cluster no meu conjunto de dados. Dado o conjunto de dados Train , usei o seguinte código matlab
Train_data = full(Train);
Result = [];
for num_of_cluster = 1:20
centroid = kmeans(Train_data,num_of_cluster,'distance','sqeuclid');
s = silhouette(Train_data,centroid,'sqeuclid');
Result = [ Result; num_of_cluster mean(s)];
end
plot( Result(:,1),Result(:,2),'r*-.');`
O gráfico resultante é fornecido abaixo com xaxis como número de cluster e média yaxis do valor da silhueta .
Como interpreto esse gráfico? Como eu determino o número de cluster disso?
data-visualization
clustering
matlab
Aprendiz
fonte
fonte
Respostas:
A resposta de Sergey contém o ponto crítico, que é o de que o coeficiente da silhueta quantifica a qualidade do agrupamento alcançado - portanto, você deve selecionar o número de clusters que maximiza o coeficiente da silhueta.
A resposta longa é que a melhor maneira de avaliar os resultados de seus esforços de cluster é começar realmente examinando - inspeção humana - os clusters formados e fazendo uma determinação com base no entendimento do que os dados representam, do que um cluster representa, e o que o clustering pretende alcançar.
Existem numerosos métodos quantitativos de avaliação dos resultados do agrupamento que devem ser usados como ferramentas, com total compreensão das limitações. Eles tendem a ser bastante intuitivos por natureza e, portanto, têm um apelo natural (como problemas de agrupamento em geral).
Exemplos: massa / raio / densidade do cluster, coesão ou separação entre os clusters, etc. Esses conceitos geralmente são combinados, por exemplo, a taxa de separação para a coesão deve ser grande se o cluster for bem-sucedido.
A maneira como o clustering é medido é informada pelo tipo de algoritmo de clustering usado. Por exemplo, medir a qualidade de um algoritmo de clustering completo (no qual todos os pontos são colocados em clusters) pode ser muito diferente de medir a qualidade de um algoritmo de clustering fuzzy baseado em limites (no qual algum ponto pode ser deixado sem cluster como 'ruído' )
O coeficiente de silhueta é uma dessas medidas. Funciona da seguinte maneira:
Para cada ponto p, encontre primeiro a distância média entre pe todos os outros pontos no mesmo cluster (essa é uma medida de coesão, chame-a de A). Em seguida, encontre a distância média entre pe todos os pontos no cluster mais próximo (essa é uma medida de separação do outro cluster mais próximo, chame-o de B). O coeficiente de silhueta para p é definido como a diferença entre B e A dividida pela maior das duas (max (A, B)).
Avaliamos o coeficiente de cluster de cada ponto e, a partir disso, podemos obter o coeficiente médio 'geral' de cluster.
Intuitivamente, estamos tentando medir o espaço entre os clusters. Se a coesão do cluster for boa (A é pequena) e a separação do cluster for boa (B for grande), o numerador será grande etc.
Eu construí um exemplo aqui para demonstrar isso graficamente.
Nesses gráficos, os mesmos dados são plotados cinco vezes; as cores indicam os clusters criados pelo agrupamento k-means, com k = 1,2,3,4,5. Ou seja, forcei um algoritmo de clustering a dividir os dados em 2 clusters, depois 3 e assim por diante, e colori o gráfico de acordo.
O gráfico da silhueta mostra que o coeficiente da silhueta foi mais alto quando k = 3, sugerindo que esse é o número ideal de clusters. Neste exemplo, temos a sorte de poder visualizar os dados e podemos concordar que, de fato, três clusters capturam melhor a segmentação desse conjunto de dados.
Se não formos capazes de visualizar os dados, talvez por causa da dimensionalidade mais alta, um gráfico de silhueta ainda nos daria uma sugestão. No entanto, espero que minha resposta um tanto extenuada aqui também mostre que essa "sugestão" pode ser muito insuficiente ou simplesmente errada em certos cenários.
fonte
the average silhouette witdh "suggestion" could be very insufficient or just plain wrong in certain scenarios.
você afirma.Dê uma olhada na Caixa de Ferramentas da Plataforma de Análise de Validade de Cluster (CVAP) e alguns dos materiais (links) do CVAP:
Você também pode verificar esta (simples) Ferramenta para estimar o número de clusters
Basta dar uma olhada nos exemplos dos dois kits de ferramentas (você também pode usar outras técnicas de validação de cluster)
fonte
Estive pesquisando a mesma coisa hoje e encontrei uma interpretação aqui . Faz sentido lógico, mas não tenho certeza se podemos aplicar cegamente a interpretação para nossos conjuntos de dados. Em resumo, o que esse artigo diz é o seguinte:
No entanto, parece que podemos usar a largura da silhueta para capturar discrepâncias. Em uma tarefa de agrupamento de documentos que estou manipulando atualmente, aqueles com largura de silhueta negativa são valores discrepantes definidos (quando comparados com seu significado semântico). Não tenho certeza se essa largura melhorará após a remoção de outliers (novamente, isso faz sentido lógico, mas eu não fiz isso sozinho).
fonte
Se você estiver tentando selecionar o número de clusters para aprendizado não supervisionado, talvez tente fazer algo como:
http://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_silhouette_analysis.html
Eles usam mais do que apenas a média da pontuação da silhueta (eles usam a distribuição), mas faz sentido. Parece preferir clusters menores, mas talvez você possa tentar isso com alguns dados gerados e ver se funciona?
Como alternativa, você pode verificar este documento.
http://www.sciencedirect.com/science/article/pii/0377042787901257
fonte