J'ai un grand ensemble de données et une similitude cosinus entre eux. Je voudrais les regrouper en utilisant la similitude cosinus qui assemble des objets similaires sans avoir à spécifier au préalable le nombre de clusters que j'attends.
J'ai lu la documentation sklearn de DBSCAN et Affinity Propagation, où les deux nécessitent une matrice de distance (pas une matrice de similitude en cosinus).
Vraiment, je cherche juste un algorithme qui ne nécessite pas a) une métrique de distance et b) un nombre prédéfini de clusters .
Quelqu'un connaît-il un algorithme qui ferait cela?
la source
DBSCAN peut être mis en œuvre de manière triviale avec une mesure de similitude au lieu d'une distance. Vous avez juste besoin de changer le <= epsilon en>> epsilon.
HAC fonctionne également très bien avec les similitudes (au moins lien unique, lien complet, UPGMA, WPGMA - n'utilisez pas Ward), si vous échangez "min" et "max" (vous voulez fusionner avec une similitude maximale plutôt que minimale) distance).
Si vous êtes paresseux, vous pouvez également transformer votre similitude en distance. Si vous avez un maximum fixe, dist = max-sim fera souvent l'affaire.
la source
SimilarityNeighborPredicate
.J'utiliserais le clustering hiérarchique de sklearn
C
est votre regroupement des documentsdocs
.Vous pouvez utiliser d'autres mesures au lieu de
cosine
, et utiliser un seuil différent de0.1
la source
docs
sont les documents,Z
est la matrice de similitude cosinusJe pense que le package clustMixType pourrait vous donner de meilleurs résultats / informations.
En utilisant ce package, vous pouvez utiliser directement une combinaison de données catégoriques et numériques, il n'a besoin d'aucun type d'encodage à chaud.
Il vous suffit d'alimenter les données et elles se séparent automatiquement en données catégoriques et numériques, si vous rencontrez des problèmes au moment de la ségrégation, vous pouvez utiliser des fonctions comme
as.factor(to convert to a categorical)
etas.numeric(to convert to a Numeric field)
.Vous pouvez calculer à l'
Lambda(mean Distance value)
avance et alimenter en entrée de l'algorithme.Si vous ne connaissez pas le nombre optimal de clusters, vous pouvez utiliser
WSS(within Sum of Squares)
,plot(elbow chart)
pour décider du nombre optimal de clusters.la source
Toutes les méthodes de clustering utilisent une métrique de distance quelconque. Et rappelez-vous que la distance est essentiellement une mesure de dissimilarité. Donc, si vous normalisez votre similitude entre 0 et 1, votre distance est simplement 1-similitude
Quant aux algorithmes qui ne nécessitent pas de spécifier un certain nombre de clusters, il existe bien sûr des techniques de clustering hiérarchiques, qui construisent essentiellement une structure arborescente que vous pouvez "couper" où vous le souhaitez (vous pouvez utiliser des métriques de performance pour le faire automatiquement )
X-means est une version de K-means qui essaie un certain nombre de K et choisit celle qui maximise une fonction d'évaluation.
Le décalage moyen «trouve» également un nombre naturel de grappes mais est sensible à d'autres paramètres tels que la bande passante par exemple.
la source