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?


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.


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.


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 :-).


-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?


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.