7
votes

Spark-Comment puis-je récupérer une paire d'éléments après avoir calculé la similarité à l'aide de RowMatrix

J'ai rencontré le problème de «simulité de tous les paires» dans mon système de recommandation. Merci à Ce blog de Tradicks , 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é colonnesImilarités (seuil) Pour Article spécifique I et J

ci-dessous est quelques détails sur ce que je fais:

1) Mon fichier de données vient de MOVIELENS avec format comme celui-ci: xxx

2) J'accumule un RowMatrix dans laquelle chacun vecteur de rareté I représente les évaluations de tous les utilisateurs à ce item i xxx

CoordinateMatrix Similencitations . Comment puis-je obtenir la similitude de l'élément i et j ? Bien qu'il puisse être utilisé pour récupérer un RDD [matrixentry] , je ne sais pas si la ligne i et la colonne j correspondent à élément i et j .


0 commentaires

3 Réponses :


1
votes

Le RowMatrix peut calculer une similitude entre les colonnes. Afin que vous fassiez reconsidérer votre approche pour construire notes.map (note => (note.utilisateur, (note.Product, notation.ratant)))). Groupbykey () (et des lignes suivantes en conséquence)

Ensuite, vous aurez des identifiants de produits dans des colonnes et vous pouvez invoquer colonnesImilarités (). Entrées pour récupérer produit, produit-to, score structure.

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.


0 commentaires

10
votes

J'ai rencontré le même problème que vous et le résolu comme suit.

  1. 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 ()

  2. chose est facile alors. À la suite de colonnesImilarités (), l'index i et j correspondent exactement à l'article i et à l'élément j.


3 commentaires

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.



2
votes

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.


0 commentaires