Quelle devrait être la valeur du champ non évalué lors de la recherche de la similitude cosinus

8

Je travaille sur un système de recommandation de livres très basique. Je veux savoir quoi faire avec les champs qui ne sont pas notés par l'utilisateur lors de la recherche de similitude cosinus, devons-nous les ignorer et calculer uniquement avec les champs notés ou devons-nous les marquer 0.

Le livre que je suis en train de suivre dit d'exclure les champs car il donnera une mauvaise interprétation en cas de corrélation euclidienne et Pearson mais en cas de similitude cosinus, il met tous les champs non notés à 0.

Quelqu'un peut-il expliquer pourquoi il est nécessaire de rendre les champs non notés à 0 uniquement pour Cosinus et pas pour les autres ou existe-t-il une manière différente de le faire. (Je sais comment rendre les champs 0 dans Euclidean et Pearson affecte la sortie mais je ne suis pas sûr du cosinus)

divyum
la source
Vous pouvez consulter cette question sur stackoverflow pour obtenir plus d'informations à ce sujet.
janpreet singh
La réponse répond en partie à la question car elle montre que le maintien des entrées non notées à 0 affectera certainement la similitude correspondante. Qui pourrait être (ou non) utilisé dans l'algorithme du moteur de recommandation
janpreet singh
Avez-vous essayé la normalisation moyenne?
Valentin Calomme

Réponses:

1

Côté mise en œuvre, il y a une bonne raison de faire correspondre 0 à non noté. Étant donné que la plupart des utilisateurs n'ont pas évalué la plupart des livres, 0 sera la valeur la plus courante et la fonction de similitude cosinus peut utiliser des matrices clairsemées en interne pour accélérer le calcul. Le raccourci de matrice clairsemée est la principale raison pour laquelle les gens utilisent la similitude cosinus en premier lieu.

D'un autre côté, cela rejettera vos recommandations si l'algorithme interprète un 0 pour être plus proche d'un 1 que d'un 2. Vous devez les ignorer intentionnellement, mais vous pouvez facilement le faire dans votre implémentation de similitude cosinus plutôt que de filtrer le les données avant de les appliquer.

Timothy Nodine
la source
1. Donc, selon votre réponse, suivre quoi que ce soit ne devrait pas affecter le résultat?
divyum
0

Considérez comment la similitude cosinus est calculée .

La similitude des cosinus prend le produit scalaire de deux vecteurs réels et divise cette valeur par le produit de leur amplitude. Par l'identité du produit scalaire euclidien, il est égal au cosinus de l'angle entre les deux vecteurs. Le résultat est une valeur comprise entre 1 et -1.

Lorsque la valeur est 1, ces vecteurs pointent exactement dans la même direction. Lorsque la valeur est -1, les vecteurs pointent exactement dans la direction opposée (l'un est la négation de l'autre). Lorsque la valeur est 0, les vecteurs sont perpendiculaires entre eux; en d'autres termes, lorsque la valeur est nulle, ces deux vecteurs sont aussi différents dans l'espace d'entités qu'il est possible d'obtenir.

Le produit scalaire est la somme de tous les produits élément par élément de vos deux vecteurs. Plus ces nombres sont élevés, plus ils contribuent à la similitude du cosinus.

Maintenant, prenez n'importe quelle fonctionnalité de votre vecteur. Le cinquième, disons. Si vous définissez ce paramètre à zéro dans l'un de vos vecteurs, le cinquième élément du produit élément par élément des deux vecteurs sera également nul, quelle que soit sa valeur dans l'autre vecteur. Lorsque vous résumez tous ces produits par élément, le cinquième élément n'aura aucun impact sur la somme. Par conséquent, la définition d'une valeur dans votre vecteur d'entité à zéro signifie qu'elle ne contribue pas à la similitude du cosinus.

C'est pourquoi la définition d'une valeur nulle dans un vecteur d'entités équivaut à ne pas inclure l'entité dans le calcul de la similitude cosinus et ne déforme pas la similitude cosinus.

R Hill
la source