Tengo un conjunto de datos de miles de puntos y un medio para medir la distancia entre dos puntos, pero los puntos de datos no tienen dimensionalidad. Quiero un algoritmo para encontrar centros de clúster en este conjunto de datos. Me imagino que debido a que los datos no tienen dimensiones, un centro de clúster podría constar de varios puntos de datos y una tolerancia, y la membresía dentro del clúster podría determinarse por el promedio de la distancia de un punto de datos a cada punto de datos en el centro del clúster.
perdóneme si esta pregunta tiene una solución bien conocida, ¡sé muy poco sobre este tipo de problema! mi (muy limitada) investigación solo ha encontrado algoritmos de agrupamiento para datos dimensionales, pero me disculpo de antemano si me he perdido algo obvio.
¡gracias!
fuente
Respuestas:
Si la función de distancia es una métrica, puede emplear el agrupamiento de centros (donde se minimiza el radio máximo de una bola) o el agrupamiento de k- medios (que minimiza la suma de las distancias a los centros de los conglomerados). La agrupación del centro k es fácil: simplemente seleccione los puntos k más lejanos y tendrá la garantía de obtener una aproximación de 2 a través de la desigualdad triangular (este es un resultado antiguo debido a González).k k k k
Para el agrupamiento -median, ha habido un montón de trabajo, demasiado para revisar aquí. Michael Shindler de UCLA tiene una buena encuesta de las ideas principales.k
Ambos problemas son NP-hard en general, y son difíciles de aproximar dentro de un factor arbitrario. Tenga en cuenta que si deja de ser métrico, las cosas empeorarán en términos de aproximación.
Otro enfoque más heurístico que podría estar bien para su aplicación es usar una técnica como MDS (escalamiento multidimensional) para incrustar su matriz de distancia en un espacio euclidiano, y luego usar uno de los muchos métodos de agrupación euclidiana diferentes (o incluso agrupación de medios . ) Si está seguro de que su función de distancia es métrica, puede hacer una incrustación un poco más inteligente en el espacio euclidiano y obtener una garantía demostrable (aunque débil) sobre la calidad de su respuesta.k
En última instancia, como con la mayoría de los problemas de agrupamiento, su elección final depende de la aplicación, el tamaño de sus datos, etc.
fuente
También hay agrupación de correlación , que tiene como información de entrada para cada par de elementos que indican si pertenecen al mismo clúster o a clústeres diferentes.
fuente
Si solo está buscando un buen rendimiento empírico, el algoritmo de propagación de afinidad generalmente funciona mejor que k-medians. Hay un código disponible en varios idiomas y las publicaciones que describen el algoritmo con más detalle están aquí: http://www.psi.toronto.edu/index.php?q=affinity%20propagation
fuente
Su pregunta parece implicar que está buscando un algoritmo con un tiempo de cálculo decente. Dado el tamaño de sus vértices (o puntos) sería crear una representación gráfica ponderada de sus datos y usar el Algoritmo de Clúster de Markov (MCL) para agrupar el gráfico.
http://www.micans.org/mcl/
MCL se basa en recorridos aleatorios a través de gráficos ponderados y no ponderados para encontrar subgráficos densos. Es capaz de manejar gráficos grandes y se ha utilizado en muchos programas bioinformáticos conocidos y bien utilizados (como BLAST). -Boucher
fuente
Considere el algoritmo vecino k-más cercano .
fuente