23 votos

Agrupación de datos 1D

Tengo un conjunto de datos, quiero crear clusters sobre esos datos basados en una sola variable (no hay valores perdidos). Quiero crear 3 clusters basados en esa única variable.

¿Qué algoritmo de agrupación utilizar, k-means, EM, DBSCAN, etc.?

Mi pregunta principal es, ¿en qué circunstancias debo utilizar k-means sobre EM o EM sobre k-means?

15voto

Eero Puntos 1612

El algoritmo K-means y el algoritmo EM van a ser bastante similares para el clustering 1D.

En K-means se empieza con una suposición de dónde están las medias y se asigna cada punto al cluster con la media más cercana, luego se vuelven a calcular las medias (y varianzas) basándose en las asignaciones actuales de puntos, luego se actualiza la asignación de puntos, luego se actualizan las medias...

En EM también se empezaría con una suposición de dónde están las medias, luego se calcula el valor esperado de las asignaciones (esencialmente la probabilidad de que cada punto esté en cada conglomerado), luego se actualizan las medias estimadas (y las varianzas) utilizando los valores esperados como pesos, luego se calculan los nuevos valores esperados, luego se calculan las nuevas medias, ...

La principal diferencia es que la asignación de puntos a los clusters en K-means es un todo o nada, mientras que EM da proporciones/probabilidades de pertenencia a un grupo (un punto puede tener un 80% de probabilidad de estar en el grupo A, un 18% de probabilidad de estar en el grupo B y un 2% de probabilidad de estar en el grupo C). Si hay mucha separación entre los grupos, los dos métodos darán resultados bastante similares. Pero si hay una buena cantidad de solapamiento, entonces el EM probablemente dará resultados más significativos (incluso más si la varianza/desviación estándar es de interés). Pero si todo lo que le interesa es asignar la pertenencia a un grupo sin preocuparse por los parámetros, entonces K-means es probablemente más simple.

¿Por qué no hacer las dos cosas y ver hasta qué punto son diferentes las respuestas? Si son parecidas, opta por la más sencilla; si son diferentes, decide comparar la agrupación con los datos y los conocimientos externos.

4voto

Kvinmarco Puntos 11

EM es mejor que k-means en términos de resultados.

Sin embargo, K-means tiene un tiempo de ejecución más rápido.

Obtendrán resultados similares si las matrices de desviación típica/covarianza son aproximadamente iguales. Si sospecha que es así, utilice k-means.

DBSCAN se utiliza cuando los datos no son gaussianos. Si utiliza datos unidimensionales, esto no suele ser aplicable, ya que una aproximación gaussiana suele ser válida en 1 dimensión.

0voto

GR7 Puntos 135

Otra forma sencilla es utilizar básicamente la ordenación de la matriz 1D: es decir, iterar sobre cada punto y obtener los valores que están a una distancia mínima de él tanto en sentido positivo como negativo. Por ejemplo:

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}

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}

Que señala, que los artículos cercanos a un punto en particular están básicamente bajo su grupo. Lo único sobre lo que hay que reflexionar en esta técnica es la variable k, que es el tamaño fijo del conglomerado :-).

-1voto

FMZ Puntos 152

Si sólo hay una variable, no es necesaria la agrupación. Puede agrupar fácilmente sus observaciones basándose en la distribución de la variable.

¿O me estoy perdiendo algo?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X