10

Tengo un gran conjunto de datos que me gustaría agrupar. Mi tamaño de conjunto de prueba es de 2.500 objetos; cuando lo ejecute en el "trato real" tendré que manejar al menos 20k objetos.agrupamiento con similitud de coseno

Estos objetos tienen una similitud de coseno entre ellos. Esta similitud de coseno no cumple los requisitos de ser una medida de distancia matemática; no satisface la desigualdad del triángulo.

Me gustaría agruparlos de alguna manera "natural" que junte objetos similares sin necesidad de especificar de antemano el número de clústeres que espero.

¿Alguien sabe de un algoritmo que haría eso? Realmente, estoy buscando cualquier algoritmo que no requiera a) una métrica de distancia yb) un número de conglomerados previamente especificado.

¡Muchas gracias!

Esta pregunta se ha hecho antes aquí: Clustering from the cosine similarity values (pero esta solución sólo ofrece K-means clustering), y aquí: Effective clustering of a similarity matrix (pero esta solución era bastante vaga)

+4

De http://en.wikipedia.org/wiki/Cosine_similarity: "Aunque el término" similitud del coseno "se ha utilizado para esta distancia angular, el término se usa de forma extraña ya que el coseno del ángulo se usa solo como mecanismo conveniente para calcular el ángulo en sí mismo y no es parte del significado.La ventaja del coeficiente de similitud angular es que, cuando se usa como coeficiente de diferencia (restándolo de 1) * la función resultante es una métrica de distancia * adecuada, que no es el caso para el primer significado. " – phs

+0

¡Gracias! Lamentablemente debería haber sido más específico, estoy usando una similitud similar a un coseno que yo mismo he definido. No satisface la desigualdad del triángulo. – user1473883

Respuesta

3

Apache mahout tiene una serie de algoritmos de agrupación, incluidos algunos que no requieren que especifique N y que le permiten especificar la métrica de distancia.

La agrupación de desplazamiento medio es similar a k-medias pero sin un número de conglomerados previamente especificado https://cwiki.apache.org/confluence/display/MAHOUT/Mean+Shift+Clustering.

Entonces, de forma más general, si desea probar una variedad de algoritmos, existe una gran cantidad de sofisticados paquetes disponibles para R (incluidas algunas implementaciones Bayesianas variacionales de EM que seleccionarán el mejor número de clústeres) que tengan demostrado ser muy útil para algunas de mis investigaciones en el pasado: http://cran.r-project.org/web/views/Cluster.html.

2

En realidad, la mayoría de los algoritmos que requieren una "función de distancia" no tienen el requisito de que sea una métrica.

DBSCAN se puede generalizar (ver Wikipedia) a una versión donde incluso se abstrae de la distancia, solo necesita tener algún tipo de noción "densa". (DBSCAN tampoco necesita saber la cantidad de clusters de antemano)

Pero incluso para k-means - que tiene requisitos bastante estrictos sobre la distancia, incluso más allá de la métrica - hay una variante llamada esférica k-means.

De todos modos, en un contexto de base de datos, los requisitos completos de "métrica" ​​son utópicos. En cualquier dato del mundo real, puede haber dos registros con las mismas coordenadas, por lo que a lo sumo tendrá una pseudo-métrica. La desigualdad triangular juega principalmente un papel para la optimización (por ejemplo, al usar un índice de árbol M, que tiene requisitos estrictos de desigualdad de triángulo) o medios k acelerados que explotan esta propiedad.

2

También puede probar Propagación de afinidad (http://www.psi.toronto.edu/index.php?q=affinity%20propagation). El algoritmo toma una matriz de similitud como entrada, y también puede, creo, ajustar automáticamente el número de centroides del clúster.