J'ai rencontré le problème de «simulité de tous les paires» dans mon système de recommandation. Merci à Ce blog de Tradicks A>, il semble que RowMatrix puisse venir aider. Cependant, RowMatrix est un type de matrice sans indices de ligne significatifs, je ne sais pas comment récupérer le résultat de similarité après avoir invoqué ci-dessous est quelques détails sur ce que je fais: p> 1) Mon fichier de données vient de MOVIELENS avec format comme celui-ci: p> 2) J'accumule un RowMatrix dans laquelle chacun vecteur de rareté I em> représente les évaluations de tous les utilisateurs à ce item i em> p> CoordinateMatrix colonnesImilarités (seuil) code > Pour Article spécifique I et J Strard> P>
Similencitations code>. Comment puis-je obtenir la similitude de l'élément i et j em>? Bien qu'il puisse être utilisé pour récupérer un
RDD [matrixentry] code>, je ne sais pas si la ligne i et la colonne j em> correspondent à élément i et j em >. p> p>
3 Réponses :
Le RowMatrix peut calculer une similitude entre les colonnes. Afin que vous fassiez reconsidérer votre approche pour construire Ensuite, vous aurez des identifiants de produits dans des colonnes et vous pouvez invoquer Si vous avez de grandes valeurs dans l'ID de produit, vous devrez probablement modifier vos valeurs sur les valeurs d'index artificielles. Par exemple. Si vous avez 3 produits avec IDS: 1, 900000, 9000000, vous devez le mapper sur 0,1,2 puis calculez les similitudes. Sans cette cartographie, vous calculerez des similitudes entre les produits 0-9000000, même si vous n'en avez pas autant. P> notes.map (note => (note.utilisateur, (note.Product, notation.ratant)))). Groupbykey () code>
(et des lignes suivantes en conséquence) p>
colonnesImilarités (). Entrées code> pour récupérer
produit, produit-to, score code> structure. p>
J'ai rencontré le même problème que vous et le résolu comme suit. p>
Vous devez noter que les colonnesImilarités () consiste à appeler la similitude des vecteurs de colonne. Cependant, nos "lignes" sont toujours composées de vecteurs de lignes. Vous devriez donc obtenir la transposition des "lignes", supposons que ce soit "Tran_Rows". Puis calculez Tran_Rows.columnSimilarity () P> LI>
chose est facile alors. À la suite de colonnesImilarités (),
Une mise en garde est que les colonnesImilarités () renvoie une coordinatematrix supérieure triangulaire, de sorte que l'un des (i, j) ou (j, i) existe dans les entrées. Lequel existe dépend de savoir si je
Comment avez-vous transposé la matrice? RowMatrix ne semble pas avoir cette méthode.
@ Shubhamgoel27 Vous devrez convertir votre RowMatrix en une coordonnatrice et appelez .Transposez () à ce sujet.
Si le seuil n'est pas si souhaitable dans votre cas, vous pouvez utiliser des colonnesImilarités sur indexedrowwmatrix. Cela fonctionne très bien pour moi. De cette façon, vous avez un meilleur moyen de gérer les indices de ligne. p>