Article sur la similitude des cosinus sur Wikipedia
Pouvez-vous montrer les vecteurs ici (dans une liste ou quelque chose), puis faire le calcul, et voyons comment cela fonctionne?
Je suis un débutant.
Article sur la similitude des cosinus sur Wikipedia
Pouvez-vous montrer les vecteurs ici (dans une liste ou quelque chose), puis faire le calcul, et voyons comment cela fonctionne?
Je suis un débutant.
Réponses:
Voici deux textes très courts à comparer:
Julie loves me more than Linda loves me
Jane likes me more than Julie loves me
Nous voulons savoir à quel point ces textes sont similaires, uniquement en termes de nombre de mots (et en ignorant l'ordre des mots). Nous commençons par faire une liste des mots des deux textes:
Maintenant, nous comptons le nombre de fois que chacun de ces mots apparaît dans chaque texte:
Nous ne sommes cependant pas intéressés par les mots eux-mêmes. Nous ne nous intéressons qu'à ces deux vecteurs verticaux de dénombrement. Par exemple, il y a deux instances de «moi» dans chaque texte. Nous allons décider de la proximité de ces deux textes en calculant une fonction de ces deux vecteurs, à savoir le cosinus de l'angle entre eux.
Les deux vecteurs sont, encore une fois:
Le cosinus de l'angle entre eux est d'environ 0,822.
Ces vecteurs sont à 8 dimensions. Une vertu de l'utilisation de la similitude cosinus est clairement qu'elle convertit une question qui dépasse la capacité humaine à visualiser en une question qui peut l'être. Dans ce cas, vous pouvez considérer cela comme un angle d'environ 35 degrés, ce qui représente une certaine «distance» de zéro ou un accord parfait.
la source
Je suppose que vous êtes plus intéressé à obtenir un aperçu du " pourquoi " la similitude cosinus fonctionne (pourquoi elle fournit une bonne indication de la similitude), plutôt que " comment " elle est calculée (les opérations spécifiques utilisées pour le calcul). Si votre intérêt est dans ce dernier, voir la référence indiquée par Daniel dans ce post, ainsi qu'une question SO connexe .
Pour expliquer à la fois le comment et plus encore le pourquoi, il est utile, dans un premier temps, de simplifier le problème et de ne travailler qu'en deux dimensions. Une fois que vous obtenez cela en 2D, il est plus facile de le penser en trois dimensions, et bien sûr plus difficile à imaginer dans de nombreuses autres dimensions, mais d'ici là, nous pouvons utiliser l'algèbre linéaire pour faire les calculs numériques et aussi pour nous aider à penser en termes de lignes / vecteurs / "plans" / "sphères" en n dimensions, même si nous ne pouvons pas les dessiner.
Donc, en deux dimensions : en ce qui concerne la similitude du texte, cela signifie que nous nous concentrerions sur deux termes distincts, disons les mots "Londres" et "Paris", et nous compterions combien de fois chacun de ces mots se trouve dans chacun des les deux documents que nous souhaitons comparer. Cela nous donne, pour chaque document, un point dans le plan xy. Par exemple, si Doc1 avait Paris une fois et Londres quatre fois, un point en (1,4) présenterait ce document (en ce qui concerne cette évaluation diminutive des documents). Ou, en termes de vecteurs, ce document Doc1 serait une flèche allant de l'origine au point (1,4). Avec cette image à l'esprit, réfléchissons à ce que signifie que deux documents soient similaires et comment cela se rapporte aux vecteurs.
DES DOCUMENTS TRÈS similaires (encore une fois en ce qui concerne cet ensemble limité de dimensions) auraient le même nombre de références à Paris, ET le même nombre de références à Londres, ou peut-être, ils pourraient avoir le même rapport de ces références. Un document, Doc2, avec 2 références à Paris et 8 références à Londres, serait également très similaire, mais avec peut-être un texte plus long ou en quelque sorte plus répétitif des noms des villes, mais dans la même proportion. Peut-être que les deux documents sont des guides sur Londres, ne faisant que des références passagères à Paris (et à quel point cette ville est cool ;-) Je plaisante !!!.
Maintenant, des documents moins similaires peuvent également inclure des références aux deux villes, mais dans des proportions différentes. Peut-être que Doc2 ne citerait Paris qu'une seule fois et Londres sept fois.
De retour à notre plan xy, si nous dessinons ces documents hypothétiques, nous voyons que lorsqu'ils sont TRÈS similaires, leurs vecteurs se chevauchent (bien que certains vecteurs puissent être plus longs), et comme ils commencent à avoir moins en commun, ces vecteurs commencent à diverger, pour avoir un angle plus large entre eux.
En mesurant l'angle entre les vecteurs, nous pouvons avoir une bonne idée de leur similitude , et pour rendre les choses encore plus faciles, en prenant le cosinus de cet angle, nous avons une belle valeur de 0 à 1 ou -1 à 1 qui indique cette similitude, en fonction de quoi et comment nous rendons compte. Plus l'angle est petit, plus la valeur du cosinus est grande (proche de 1) et plus la similitude est élevée.
A l'extrême, si Doc1 ne cite que Paris et Doc2 ne cite que Londres, les documents n'ont absolument rien en commun. Doc1 aurait son vecteur sur l'axe des x, Doc2 sur l'axe des y, l'angle 90 degrés, Cosinus 0. Dans ce cas, nous dirions que ces documents sont orthogonaux entre eux.
Ajout de dimensions :
avec cette sensation intuitive de similitude exprimée sous la forme d'un petit angle (ou d'un grand cosinus), nous pouvons maintenant imaginer des choses en 3 dimensions, par exemple en introduisant le mot "Amsterdam" dans le mélange, et visualiser assez bien comment un document à deux les références à chacun auraient un vecteur allant dans une direction particulière, et nous pouvons voir comment cette direction se comparerait à un document citant Paris et Londres trois fois chacun, mais pas Amsterdam, etc. Comme dit, nous pouvons essayer d'imaginer cette fantaisie espace pour 10 ou 100 villes. C'est difficile à dessiner, mais facile à conceptualiser.
Je terminerai en disant quelques mots sur la formule elle-même . Comme je l'ai dit, d'autres références fournissent de bonnes informations sur les calculs.
D'abord en deux dimensions. La formule du cosinus de l'angle entre deux vecteurs est dérivée de la différence trigonométrique (entre l'angle a et l'angle b):
Cette formule ressemble beaucoup à la formule du produit scalaire:
où
cos(a)
correspond à lax
valeur etsin(a)
lay
valeur, pour le premier vecteur, etc. Le seul problème est quex
,y
etc. ne sont pas exactement lescos
et lessin
valeurs, ces valeurs doivent être lues sur le cercle unité. C'est là que le dénominateur de la formule entre en jeu: en divisant par le produit de la longueur de ces vecteurs, les coordonnéesx
ety
deviennent normalisées.la source
Voici mon implémentation en C #.
la source
Pour simplifier, je réduis le vecteur a et b:
Ensuite, similitude cosinus (Theta):
alors l'inverse de cos 0,5 est de 60 degrés.
la source
Ce code Python est ma tentative rapide et sale d'implémenter l'algorithme:
la source
En utilisant l'exemple @Bill Bell, deux façons de procéder dans [R]
ou en profitant des performances de la méthode crossprod () ...
la source
Il s'agit d'un
Python
code simple qui implémente la similitude cosinus.la source
la source
Code JAVA simple pour calculer la similitude cosinus
la source
Deux vecteurs A et B existent dans un espace 2D ou 3D, l'angle entre ces vecteurs est la similitude cos.
Si l'angle est supérieur (peut atteindre un maximum de 180 degrés), c'est Cos 180 = -1 et l'angle minimum est de 0 degré. cos 0 = 1 implique que les vecteurs sont alignés les uns aux autres et donc les vecteurs sont similaires.
cos 90 = 0 (ce qui est suffisant pour conclure que les vecteurs A et B ne sont pas du tout similaires et comme la distance ne peut pas être négative, les valeurs de cosinus se situeront de 0 à 1. Par conséquent, plus d'angle implique de réduire la similitude (la visualiser également logique)
la source