web-dev-qa-db-fra.com

Comment fonctionne le clustering (surtout en grignotage)?

J'ai entendu parler de la regroupement de données similaires. Je veux savoir comment cela fonctionne dans le cas spécifique de la chaîne.

J'ai une table avec plus que 100 000 mots différents.

Je veux identifier le même mot avec quelques différences (par exemple: house, house!!, hooouse, HoUse, @house, "house", etc...).

Ce qui est nécessaire pour identifier la similitude et le groupe chaque mot dans un cluster? Quel algorithme est plus recommandé pour cela?

30
Renato Dinhani

Comprendre ce que la clustering imagine une carte géographique. Vous pouvez voir de nombreux objets distincts (tels que des maisons). Certains d'entre eux sont proches les uns des autres et d'autres sont loin. Sur cette base, vous pouvez diviser tous les objets en groupes (tels que les villes). Les algorithmes de regroupement font exactement cette chose - ils vous permettent de scinder vos données en groupes sans précédent Spécification des frontières.

Tous les algorithmes de regroupement sont basés sur le distance (ou vraisemblance) entre 2 objets. Sur la carte géographique, il s'agit d'une distance normale entre 2 maisons, dans un espace multidimensionnel, il peut s'agir de la distance euclidienne (en fait, la distance entre 2 maisons sur la carte est également une distance euclidienne). Pour la comparaison des chaînes, vous devez utiliser quelque chose de différent. 2 bons choix ici sont Hamming et distance Levenshtein . Dans votre cas particulier La distance de Levenshtein Si plus préférable (distance de Hamming ne fonctionne qu'avec les cordes de la même taille).

Vous pouvez maintenant utiliser l'un des algorithmes de clustering existants. Il y en a beaucoup, mais tous ne peuvent pas tous répondre à vos besoins. Par exemple, pure k-moyen, déjà mentionné ici vous aidera à peine à vous aider, car il nécessite un nombre initial de groupes à trouver, et avec un grand dictionnaire de chaînes, il peut être 100, 200 500, 10000 - vous ne connaissez tout simplement pas le nombre . Donc, d'autres algorithmes peuvent être plus appropriés.

L'un d'entre eux est Attente maximisation algorithme. Son avantage est qu'il peut trouver un nombre de clusters automatiquement. Cependant, dans la pratique, il donne souvent moins de résultats précis que les autres algorithmes, il est donc normal d'utiliser k-moyen sur le dessus de EM, c'est-à-dire d'abord le nombre de clusters et de leurs centres avec EM puis utilisez K-moyen pour ajuster le résultat.

Une autre branche possible des algorithmes pouvant convenir à votre tâche, est clustering hiérarchique . Le résultat de l'analyse de grappes dans ce cas n'est pas un ensemble de groupes indépendants, mais plutôt d'arborescence (hiérarchie), où plusieurs clusters plus petits sont regroupés en une plus grande, et toutes les clusters font finalement une partie d'un gros cluster. Dans votre cas, cela signifie que tous les mots sont similaires aux autres jusqu'à une certaine mesure.

45
ffriend

Il existe un package appelé stringdist qui permet une comparaison de chaîne à l'aide de plusieurs méthodes différentes . Copypyposant de cette page:

  • Distance Hamming: Nombre de positions avec le même symbole dans les deux cordes. Défini uniquement pour les cordes de longueur égale.
  • Distance de Levenshtein: Nombre minimal d'insertions, suppressions et remplacements nécessaires à la transformation de la chaîne A en chaîne b.
  • (Plein) Damerau-Levenshtein Distance: comme Levenshtein distance, mais la transposition des symboles adjacents est autorisée.
  • String Optimal String Alignement/Restreint Damerau-Levenshtein Distance: comme (plein) Damerau-Levenshtein distance mais chaque sous-chaîne ne peut être éditée qu'une seule fois.
  • La plus longue distance de sous-chaîne commune: nombre minimal de symboles à retirer dans les deux chaînes jusqu'à ce que des substrings résultantes soient identiques.
  • q-GRAM Distance: Somme des différences absolues entre les vecteurs N-Gram des deux cordes.
  • Distance des cosinus: 1 moins la similarité de cosinus des deux vecteurs N-Gram.
  • Distance Jaccard: 1 minute Le quotient de N-grammes partagés et de tous les N-grammes observés.
  • Distance Jaro: La distance Jaro est une formule de 4 valeurs et efficacement un cas particulier de la distance jaro-Winkler avec p = 0.
  • Jaro-Winkler Distance: Cette distance est une formule de 5 paramètres déterminés par les deux cordes comparées (A, B, M, T, L) et P choisies parmi [0, 0,25].

Cela vous donnera la distance. Vous n'avez peut-être pas besoin d'effectuer une analyse de grappes, peut-être trier par la distance de cordes elle-même suffit. J'ai créé un script pour fournir la fonctionnalité de base ici ... N'hésitez pas à l'améliorer au besoin.

4
Amit Kohli