Encontramos os centros de cluster e atribuímos pontos a k diferentes compartimentos de cluster no cluster k-means, que é um algoritmo muito conhecido e é encontrado quase em todos os pacotes de aprendizado de máquina da rede. Mas a parte que falta e mais importante na minha opinião é a escolha de um k correto. Qual é o melhor valor para isso? E, o que se entende por melhor ?
Eu uso o MATLAB para computação científica, onde analisar gráficos de silhueta é uma forma de decidir sobre o k discutido aqui . No entanto, eu estaria mais interessado em abordagens bayesianas. Todas as sugestões são apreciadas.
clustering
k-means
petrichor
fonte
fonte
R
cima aquiRespostas:
Isso já foi solicitado algumas vezes no stackoverflow: aqui , aqui e aqui . Você pode dar uma olhada no que a multidão ali pensa sobre essa questão (ou uma pequena variante dela).
Deixe-me também copiar minha própria resposta para esta pergunta, no stackoverflow.com:
Infelizmente, não há como definir automaticamente o K "certo" nem definir o que é "certo". Não existe um método estatístico baseado em princípios, simples ou complexo que possa definir o "K certo". Existem heurísticas, regras práticas que às vezes funcionam, às vezes não.
A situação é mais geral, já que muitos métodos de agrupamento têm esse tipo de parâmetro, e acho que esse é um grande problema em aberto na comunidade de pesquisa de agrupamento / aprendizado não supervisionado.
fonte
Em primeiro lugar uma ressalva. No cluster, geralmente não existe uma "resposta correta" - um cluster pode ser melhor que outro em uma métrica e o inverso pode ser verdadeiro usando outra métrica. E, em algumas situações, dois agrupamentos diferentes podem ser igualmente prováveis sob a mesma métrica.
Dito isto, você pode querer dar uma olhada nos Processos Dirichlet . Veja também este tutorial .
Se você começar com um modelo de Mistura Gaussiana, terá o mesmo problema que os meios-k - precisará escolher o número de clusters. Você pode usar evidência de modelo, mas não será robusta neste caso. Portanto, o truque é usar um processo de Dirichlet antes dos componentes da mistura, o que permite que você tenha um número potencialmente infinito de componentes da mistura, mas o modelo (normalmente) encontrará automaticamente o número "correto" de componentes (sob as premissas de o modelo).
fonte
Eu uso o método Elbow :
A lógica é que, depois disso, você aumenta o número de clusters, mas o novo cluster fica muito próximo de alguns dos existentes.
fonte
Os tamanhos de cluster dependem muito dos seus dados e para o que você usará os resultados. Se você estiver usando seus dados para dividir as coisas em categorias, tente imaginar quantas categorias você deseja primeiro. Se for para visualização de dados, torne-o configurável, para que as pessoas possam ver os clusters grandes e os menores.
Se você precisar automatizá-lo, poderá adicionar uma penalidade ao aumento de k e calcular o cluster ideal dessa maneira. E então você pesa k, dependendo se você quer uma tonelada de clusters ou se deseja muito poucos.
fonte
Você também pode verificar o Clustering Fuzzy Ótimo Não Supervisionado, que lida com o problema mencionado (localizando o número de clusters) nos quais uma versão modificada é implementada aqui
fonte
Consegui usar o "Método L" para determinar o número de clusters em um aplicativo geográfico (isto é, essencialmente um problema 2d, embora tecnicamente não-euclidiano).
O Método L é descrito aqui: Determinando o Número de Clusters / Segmentos em Algoritmos Hierárquicos de Cluster / Segmentação Stan Salvador e Philip Chan
Essencialmente, isso avalia o ajuste para vários valores de k. Um gráfico em forma de "L" é visto com o valor ótimo de k representado pelo joelho no gráfico. Um cálculo simples de ajuste de mínimos quadrados de linha dupla é usado para encontrar o ponto do joelho.
Achei o método muito lento porque o k-means iterativo deve ser calculado para cada valor de k. Também achei que o k-means funcionou melhor com várias execuções e escolhendo a melhor no final. Embora cada ponto de dados possua apenas duas dimensões, uma simples distância pitagórica não pôde ser usada. Então isso é muito calculista.
Um pensamento é pular todos os outros valores de k (digamos) para metade dos cálculos e / ou reduzir o número de iterações de meios k e, em seguida, suavizar levemente a curva resultante para produzir um ajuste mais preciso. Perguntei sobre isso no StackOverflow - IMHO, a questão da suavização continua sendo uma questão de pesquisa aberta.
fonte
Mas e se o seu conjunto de dados não se encaixar no esquema Voronoi?
fonte
No geral, você pode escolher o número de clusters em dois caminhos diferentes.
orientado pelo conhecimento: você deve ter algumas idéias de quantos clusters você precisa do ponto de vista comercial. Por exemplo, você está agrupando clientes, deve perguntar a si mesmo, depois de obter esses clientes, o que devo fazer em seguida? Pode ser que você tenha tratamento diferente para diferentes grupos? (por exemplo, publicidade por email ou telefone). Então, quantos tratamentos possíveis você está planejando? Neste exemplo, você seleciona, digamos, 100 clusters não fará muito sentido.
Acionado por dados: maior número de clusters está em excesso e menos número de clusters está em mau ajuste. Você sempre pode dividir os dados ao meio e executar a validação cruzada para ver quantos números de clusters são bons. Observe que, no cluster, você ainda tem a função de perda, semelhante à configuração supervisionada.
Por fim, você deve sempre combinar conhecimento e dados, no mundo real.
fonte
Como ninguém apontou ainda, pensei em compartilhar isso. Existe um método chamado X-means, ( veja este link ) que estima o número adequado de clusters usando o critério de informação bayesiano (BIC). Essencialmente, isso seria como tentar K significa com Ks diferentes, calculando o BIC para cada K e escolhendo o melhor K. Esse algoritmo faz isso com eficiência.
Há também uma implementação weka , cujos detalhes podem ser encontrados aqui .
fonte
Outra abordagem é usar um algoritmo evolutivo cujos indivíduos tenham cromossomos de diferentes comprimentos. Cada indivíduo é uma solução candidata: cada um carrega as coordenadas dos centróides. O número de centróides e suas coordenadas são evoluídos para alcançar uma solução que produza a melhor pontuação de avaliação de cluster.
Este artigo explica o algoritmo.
fonte