Tengo un gran conjunto de datos y una similitud de coseno entre ellos. Me gustaría agruparlos usando la similitud de coseno que reúne objetos similares sin necesidad de especificar de antemano el número de grupos que espero.
Leí la documentación de sklearn de DBSCAN y Affinity Propagation, donde ambos requieren una matriz de distancia (no una matriz de similitud de coseno).
Realmente, solo estoy buscando cualquier algoritmo que no requiera a) una métrica de distancia yb) un número predeterminado de clústeres .
¿Alguien sabe de un algoritmo que haría eso?
fuente
DBSCAN se puede implementar trivialmente con una medida de similitud en lugar de una distancia. Solo necesita cambiar el <= epsilon en a> = epsilon.
HAC también funciona bien con similitudes (al menos enlace simple, enlace completo, UPGMA, WPGMA - no use Ward), si intercambia "min" y "max" (desea fusionar con máxima similitud en lugar de mínimo distancia).
Si eres flojo, también puedes transformar tu similitud en una distancia. Si tiene un máximo fijo, dist = max-sim a menudo lo hará.
fuente
SimilarityNeighborPredicate
.Usaría el agrupamiento jerárquico de sklearn
C
es tu agrupamiento de los documentosdocs
.Puede usar otras métricas en lugar de
cosine
, y usar un umbral diferente al0.1
fuente
docs
son los documentos,Z
es la matriz de similitud de cosenoCreo que el paquete clustMixType podría brindarle mejores resultados / ideas.
Al usar este paquete , puede usar la combinación de datos categóricos y numéricos directamente, no necesita ningún tipo de codificación activa.
Solo necesita alimentar los datos y se segrega automáticamente en datos categóricos y numéricos, si encuentra algún problema en el momento de la segregación, puede usar funciones como
as.factor(to convert to a categorical)
yas.numeric(to convert to a Numeric field)
.Puede calcular de
Lambda(mean Distance value)
antemano e introducirlo como una entrada al algoritmo.Si no conoce el número óptimo de las agrupaciones, se puede utilizar
WSS(within Sum of Squares)
,plot(elbow chart)
para decidir el número óptimo de las agrupaciones.fuente
Todos los métodos de agrupamiento utilizan una métrica de distancia de algún tipo. Y recuerde que la distancia es esencialmente una medida de disimilitud. Entonces, si normaliza su similitud entre 0 y 1, su distancia es simplemente 1-similitud
En cuanto a los algoritmos que no requieren que se especifiquen varios grupos, existen, por supuesto, técnicas de agrupamiento jerárquico, que esencialmente construyen una estructura similar a un árbol que puedes "cortar" donde quieras (puedes usar algunas métricas de rendimiento para hacerlo automáticamente). )
X-means es una versión de K-means que intenta un cierto número de K y elige la que maximiza alguna función de evaluación.
El cambio medio también "encuentra" un número natural de grupos pero es sensible a otros parámetros, como el ancho de banda, por ejemplo.
fuente