Agrupando dados 1D

16

Eu tenho um conjunto de dados, quero criar clusters nesses dados com base em apenas uma variável (não há valores ausentes). Eu quero criar 3 clusters com base nessa variável.

Qual algoritmo de clustering usar, k-means, EM, DBSCAN etc.?

Minha principal pergunta é: em que circunstâncias devo usar k-means em EM ou EM em k-means?

Todos
fonte
1
O algoritmo EM é uma ferramenta de uso geral para estimar a probabilidade máxima com dados ausentes - você pode ser mais específico sobre como é um "algoritmo de agrupamento"?
Macro
Estou usando o weka como uma ferramenta e, no algoritmo de agrupamento, o EM é listado como um algoritmo. Sinto muito pela pergunta esfarrapada, sou novo na mineração de dados.
ali Ali
Eu sei que o algoritmo EM é usado para estimar a probabilidade máxima para modelos de variáveis ​​latentes (que podem ser considerados "dados ausentes") e variáveis ​​latentes são frequentemente usadas para modelar clustering. Talvez seja isso que se entende.
Macro
@ macro: você pode querer dar uma olhada aqui: stat.washington.edu/mclust para começar.
precisa saber é o seguinte
3
Qual é o objetivo do clustering? Como na maioria das questões estatísticas, existem várias respostas e saber que o objetivo é um guia essencial para a seleção de respostas apropriadas ou boas.
whuber

Respostas:

11

O algoritmo K-means e o algoritmo EM serão bastante semelhantes para o cluster 1D.

Em K-means, você começa com um palpite sobre onde estão os meios e atribui cada ponto ao cluster com a média mais próxima; em seguida, recalcula os meios (e variações) com base nas atribuições atuais de pontos, atualiza a atribuição de pontos e atualiza o significado ...

No EM, você também começaria com um palpite sobre onde estão as médias, depois calcula o valor esperado das atribuições (essencialmente a probabilidade de cada ponto estar em cada cluster) e atualiza as médias (e variações) estimadas usando os valores esperados como pesos, calcule novos valores esperados, calcule novos meios, ...

A principal diferença é que a atribuição de pontos a clusters em médias K é tudo ou nada, onde EM fornece proporções / probabilidade de pertencer a um grupo (um ponto pode ser visto como tendo 80% de probabilidade de pertencer ao grupo A, 18% de probabilidade pertencer ao grupo B e 2% de probabilidade de pertencer ao grupo C). Se houver muita separação entre os grupos, os 2 métodos darão resultados bastante semelhantes. Mas se houver uma justa quantidade de sobreposição, o EM provavelmente fornecerá resultados mais significativos (ainda mais se a variação / desvio padrão for de interesse). Mas se você só gosta de atribuir uma associação ao grupo sem se importar com os parâmetros, então K-means é provavelmente mais simples.

Por que não fazer as duas coisas e ver como as respostas são diferentes? se forem semelhantes, escolha a mais simples; se forem diferentes, decida comparar o agrupamento com os dados e o conhecimento externo.

Greg Snow
fonte
Graças greg seu post ajudou, eu apliquei os dois e parece que o EM gerou clusters melhores que o k-mean. (Eu acho que é principalmente porque os dados que tenho são contínuos e não há lacunas). Estou um pouco confuso, já que só tenho dados 1D, então provavelmente devo fazer binning para categorizar os dados. O que você acha? O que exatamente você quer dizer com parâmetros? Refere-se aos atributos de uma instância? Obrigado Ali
Ali
Hm EM sozinho parece ser insuficiente. Você precisa de uma suposição sobre a distribuição das distribuições subjacentes da mistura.
Tomka
2

O EM é melhor que o K-mean em termos de resultados.

K-significa, no entanto, tem um tempo de execução mais rápido.

Eles produzirão resultados semelhantes se as matrizes de desvio / covariância padrão forem aproximadamente iguais. Se você suspeitar que isso seja verdade, use k-means.

DBSCAN é usado quando os dados não são gaussianos. Se você estiver usando dados unidimensionais, isso geralmente não é aplicável, pois uma aproximação gaussiana é normalmente válida em 1 dimensão.

user52516
fonte
0

Outra maneira simples é basicamente usar a classificação da matriz 1D: ou seja, itere sobre cada ponto e obtenha os valores que estão a uma distância mínima dele nas direções positiva e negativa. Por exemplo:

data = [1,2,3,4,5,6,7,8,9,10,12]
k = 5
for a in data:
   print {'group': sorted(k, key=lambda n: abs(n-a))[0:k], 'point': a}

vai dar:

{'group': [1, 2, 3, 4, 5], 'point': 1}
{'group': [2, 1, 3, 4, 5], 'point': 2}
{'group': [3, 2, 4, 1, 5], 'point': 3}
{'group': [4, 3, 5, 2, 6], 'point': 4}
{'group': [5, 4, 6, 3, 7], 'point': 5}
{'group': [6, 5, 7, 4, 8], 'point': 6}
{'group': [7, 6, 8, 5, 9], 'point': 7}
{'group': [8, 7, 9, 6, 10], 'point': 8}
{'group': [9, 8, 10, 7, 6], 'point': 9}
{'group': [10, 9, 8, 12, 7], 'point': 10}
{'group': [12, 10, 9, 8, 7], 'point': 12}

Quais pontos, que os itens próximos a um ponto específico estão basicamente no seu grupo. A única coisa a considerar nesta técnica é a variável k, que é o tamanho fixo do cluster :-).

khan
fonte
-2

Se houver apenas uma variável, não há necessidade de armazenamento em cluster. Você pode agrupar facilmente suas observações com base na distribuição da variável.

Ou estou faltando alguns pontos aqui?

FMZ
fonte
5
Você pode dar um exemplo específico de como agrupar observações com base na distribuição da variável?
Ali
@ compositer314: com um histograma?
Nico
1
Sinto muito, mas ainda não estou seguindo. Como posso usar um histograma para agrupar observações relacionadas? (Eu acho que a pergunta que pode estar se perguntando é realmente como é que uma aglomerados encontrar dentro de um histograma que isso seria semelhante ao espectral colheita de pico?)
Ali
5
@composer Usar o histograma ou mesmo um kernel suave dos dados geralmente não é uma maneira "fácil" de agrupar. Se você quiser seguir esse caminho, precisará ajustar um modelo de mistura finita . Se você quer apenas o que uma visão casual de um histograma pode sugerir, use meios K (também conhecido como método de Jenks , popular entre os cartógrafos).
whuber