PC & Mobile

Filtrage collaboratif sur les matrices d'utilitaires

Filtrage collaboratif sur les matrices d'utilitaires


À gauche: similarité cosinus de U1 avec tous les autres utilisateurs; Droite: moyenne pondérée des notes pour I3

Notre estimation prévue pour U1 et I3 est donc de 4,34! Notez également que différentes mesures de similarité donneraient des résultats légèrement différents.

Le filtrage collaboratif article par article est à peu près identique à utilisateur-utilisateur, mais au lieu de calculer la similarité entre les utilisateurs, la similarité est calculée entre les éléments. La valeur finale que vous voulez est alors une moyenne des autres notes de U1, pondéré par la similarité de I3 avec d'autres éléments.

À gauche: similarité cosinus de I3 avec tous les autres éléments; Droite: moyenne pondérée des notes pour U1

En adoptant cette approche article par article, nous obtenons une valeur prédite de 3,31 - ce qui est très différent de notre valeur précédente de 4,34.

Plusieurs points à noter:

  • Lors du calcul de la similarité, certaines sources disent de traiter les valeurs manquantes comme étant 0 et certaines sources omettent simplement la ligne / colonne entière avec la valeur manquante dans le calcul de la similarité.
  • En général, les approches article par article ont été plus efficaces en raison des goûts uniques des utilisateurs.
  • Pour décider si vous souhaitez utiliser utilisateur-utilisateur ou élément-article, vous pouvez prendre en compte la complexité de l'algorithme. Si tu as m les utilisateurs et n éléments, la complexité temporelle serait O (m²n) pour utilisateur-utilisateur et O (mn²) pour élément. Vous pourriez décider de choisir item-item si vous avez plus d'utilisateurs et vice versa.

Nous devons commencer par un peu de théorie pour comprendre d'où viennent ces concepts. La décomposition en valeurs singulières (SVD) est une forme de factorisation matricielle. La factorisation matricielle consiste à décomposer une matrice en un produit de (généralement trois) matrices. Si vous vous souvenez de l’algèbre, lorsque nous factorisons les équations du second degré en leurs parties linéaires (c.-à-d. x² + 2x + 1 = (x + 1) (x + 1)), c’est une idée similaire.

SVD est le modèle rendu célèbre par Simon Funk lors du concours du prix Netflix en 2007. La décomposition en valeurs singulières, si vous avez suivi un cours d’algèbre linéaire, est généralement effectuée à l’aide des valeurs propres et des vecteurs propres d’une matrice. Le nom de l'algorithme utilisé dans les bibliothèques Python pour résoudre les moteurs de recommandation est nommé SVD, mais ce n’est pas exactement la factorisation de votre matrice d’utilité. Au lieu de cela, il fait le genre de sens inverse de SVD et d'essayer de recréer votre matrice d'utilité en utilisant non pas trois, mais matrices à deux composants. Comme illustré ci-dessous, ces deux matrices peuvent être interprétées comme la matrice d'éléments et la matrice d'utilisateurs.

Décomposer la matrice d'utilitaires en une matrice d'éléments et une matrice d'utilisateurs.

Les caractéristiques latentes font simplement référence à une abstraction de toutes les caractéristiques des éléments ou des utilisateurs. Tant que vous avez le même nombre de fonctionnalités latentes pour les objets et les utilisateurs, vous pouvez multiplier les matrices pour produire une matrice ayant les mêmes dimensions que votre matrice utilitaire. Le nombre de caractéristiques latentes est un hyperparamètre que vous pouvez accorder à votre modèle. Sur la base de la multiplication de matrice, nous pouvons également constater que la valeur de classement de U1 pour I3 est affectée par la ligne I3 de la matrice de postes et la colonne U1 de la matrice utilisateur.

Comme nous ne pouvons pas décomposer les matrices avec des valeurs manquantes, nous devons adopter une autre approche. C’est là que l’apprentissage automatique entre en jeu. Comme mentionné précédemment, nous allons maintenant essayer de recréer la matrice d'utilité avec notre matrice d'items et notre matrice d'utilisateur. Ceci est fait en utilisant une méthode de descente de gradient: Alternance des moindres carrés.

1. Initialisation

Comme avec tous les modèles qui utilisent la descente de gradient, vous devez commencer par quelques valeurs initiales. Nous initialisons nos matrices à deux composants. Dans cet exemple, j’ai initialisé nos matrices de composants avec tous les 1.

En bleu: après l’initialisation des matrices de composants avec 1, le matrice utilitaire recréée est tous les 2. En gris: la matrice d’utilité d’origine pour la comparaison.

2. Fonction de coût

Dans ce modèle, le fonction de coût est une métrique qui nous permet de comparer les valeurs correspondantes dans notre matrice d’utilité originale et notre matrice d’utilité recréée. Ce que cela signifie, c’est que je compare la note de U1-I1 dans ma matrice utilitaire d'origine, 4, avec le Notation U1-I1 dans ma matrice recréée, 2 et faire de même pour toutes les valeurs des matrices. Ici, j’utilise l’erreur racine-moyenne-carrée (RMSE: équivaut à différencier chaque différence de valeur, à la moyenne, puis à la racine carrée) et j’ai considéré la valeur manquante comme 0 dans mon calcul de RMSE.

3. Descente en dégradé avec alternance des moindres carrés

Le fonctionnement de cette descente de gradient consiste à essayer de minimiser la fonction de coût (RMSE) en modifiant une valeur à la fois dans une matrice de composants. Commençons par rechercher la valeur optimale de la première caractéristique latente de I1 dans la matrice d’items.

Comme indiqué dans le diagramme ci-dessus, en modifiant cette première valeur (désignée maintenant par l’inconnu X), nous mettre à jour toute la première ligne de notre matrice d'utilité recréée. Grâce à la multiplication matricielle, toute la première ligne devient X + 1. Comme le reste de la matrice est statique, on peut simplement minimiser notre fonction de coût sur cette première ligne. Par conséquent, nous minimisons simplement cette équation quadratique pour obtenir un résultat optimal. X de 2,5!

Notre RMSE diminue!

Remplacement du X avec 2.5, la première ligne de notre matrice utilitaire recréée devient une ligne de 3,5, et notre RMSE passe de 1,75 à 1,58! Ce processus est répété jusqu'à ce que RMSE ne puisse pas être amélioré. Quelque chose à noter, est que changer une valeur, soit dans l'élément ou la matrice de l'utilisateur, modifie une ligne ou une colonne entière de la matrice d'utilitaires recréée. Cela maintient des relations entre les utilisateurs et les éléments, et ce processus est ce qu'on appelle être parallélisé. Faire ce processus encore et encore (je l'ai fait en utilisant la bibliothèque Python Surprise, que je vais aborder dans un autre article), nous nous retrouvons avec un RMSE de 1,15, et voici à quoi ressemble notre matrice d’utilité recréée:

4. évaluation

Sur cette base, on peut supposer que la note de U1 pour I3 est de 3,7! Dans une matrice plus fragmentée comportant plusieurs évaluations inconnues par utilisateur, vous recommanderiez alors l'élément le plus élevé non précédemment noté. Il est intéressant de noter que, par rapport à nos prédictions utilisateur-utilisateur (4.34) et item-item (3.31), notre valeur SVD de 3,7 correspond à l’utilisation de similitudes entre les deux axes.

En pratique, avec beaucoup plus de données, vous feriez une train-test-split sur vos notations connues, puis mesurez RMSE sur les valeurs de classement réelles de votre jeu de test avec leurs valeurs prédites par le modèle. Ce RMSE serait ce qui est utilisé pour évaluer le modèle, ne pas confondre avec le RMSE utilisé comme fonction de coût en faisant cette descente de gradient alternée des moindres carrés. Et ce RMSE peut être interprété comme l’écart moyen par rapport à l’évaluation réelle de votre évaluation prédite - c’est-à-dire combien d’étoiles de moins, en moyenne, vos prévisions sont.

Ce billet est basé sur l’une de mes conférences que je donne en tant que Data Science Coach chez Flatiron School à New York - n’hésitez pas à nous contacter pour des questions ou des éclaircissements!

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close