Comment dois-je calculer le cosinus de similarité de deux vecteurs?
Comment puis-je trouver la similarité cosinus entre les vecteurs?
J'ai besoin de trouver la similitude de mesurer le degré de parenté entre deux lignes de texte.
Par exemple, j'ai deux phrases comme:
système pour l'interface utilisateur
de l'interface utilisateur de la machine
... et de leurs vecteurs d'après le tF-idf, suivie par la normalisation à l'aide de la LSI, par exemple
[1,0.5]
et [0.5,1]
.
Comment puis-je mesurer la smiliarity entre ces vecteurs?
Vous devez vous connecter pour publier un commentaire.
J'ai fait quelques tf-idf des trucs récemment pour mon Extraction de l'Information de l'unité à l'Université.
J'ai utilisé cette Similarité Cosinus méthode qui utilise Jama: Java Matrice Paquet.
Pour le code source complet voir IR Mathématiques avec Java : Mesures de Similarité, vraiment bonne ressource qui couvre un bon nombre de différentes mesures de similarité.
Si vous voulez éviter de compter sur les bibliothèques de tiers pour une telle tâche simple, ici est une simple implémentation Java:
Notez que la fonction suppose que les deux vecteurs ont la même longueur. Vous pouvez explicitement en vérifier la sécurité.
Jeter un oeil à: http://en.wikipedia.org/wiki/Cosine_similarity.
Si vous avez des vecteurs A et B.
La similarité est définie comme:
Exemple:
Pour la matrice de code en Java, je vous recommande d'utiliser le Colt de la bibliothèque. Si vous avez cela, le code ressemble (pas testé ou même compilé):
Le code ci-dessus peut également être modifié pour utiliser l'un des
Blas.dnrm2()
méthodes ouAlgebra.DEFAULT.norm2()
pour la norme de calcul. Exactement le même résultat, qui est plus lisible dépend de goût.Lorsque je travaillais avec l'exploration de texte il y a quelques temps, j'ai été en utilisant le SimMetrics bibliothèque qui fournit une vaste gamme de différents paramètres en Java. S'il arrivait que vous avez besoin de plus, il est toujours R et CRAN à regarder.
Mais de codage à partir de la description dans le Wikipedia est plutôt une tâche triviale, et peut-être un bon exercice.
Pour les rares représentation des vecteurs à l'aide de
Map(dimension -> magnitude)
Voici une version scala (Vous pouvez faire les mêmes choses en Java 8)
scala version