Algorithmes permettant de rechercher des éléments qu'un utilisateur souhaite sur la base des préférences d'autres utilisateurs

StackOverflow https://stackoverflow.com/questions/1602302

Question

Je songe à écrire une application pour classer les films dans un HTPC en fonction de ce que les membres de la famille aiment.

Je ne connais ni les statistiques ni l'IA, mais le contenu ici est très juteux. Je ne saurais pas par où commencer.

Voici ce que je veux accomplir:

  1. Composez un ensemble d’échantillons de chaque utilisateur, en évaluant chaque attribut d’échantillon séparément. Par exemple, un utilisateur aime peut-être beaucoup les films occidentaux, de sorte que le genre occidental aurait un peu plus de poids pour cet utilisateur (et ainsi de suite pour d'autres attributs, tels que des acteurs, un réalisateur, etc.).

  2. Un utilisateur peut obtenir des suggestions basées sur les goûts des autres utilisateurs. Par exemple, si les utilisateurs A et B aiment Spielberg (connexion entre les utilisateurs) et que B aime Batman Begins, mais que l’utilisateur A déteste Katie Holmes, pesez le film pour l’utilisateur A en conséquence (encore une fois, chaque attribut séparément, par exemple, L'utilisateur A n'aime pas tellement les films d'action, alors baissez un peu la note. Et puisque Katie Holmes n'est pas la star principale, ne tenez pas compte de cela autant que les autres attributs.)

En gros, comparer les ensembles de l'utilisateur A de la même manière que ceux de l'utilisateur B et obtenir un classement pour l'utilisateur A.

J'ai une idée brute sur la façon de mettre en œuvre cela, mais je suis certain que certains esprits brillants ont déjà pensé à une solution bien meilleure, alors ... des suggestions?

En fait, après une recherche rapide, il semble qu'un filtre bayésien fonctionnerait. Si oui, serait-ce la meilleure approche? Serait-ce aussi simple que de simplement "normaliser"? données de film, formation d'un classifieur pour chaque utilisateur, puis simplement classifier chaque film?

Si votre suggestion comprend des concepts de fonte des cerveaux (je ne suis pas expérimenté dans ces sujets, en particulier dans le domaine de l'IA), je vous serais reconnaissant de bien vouloir également inclure une liste de bases à explorer avant de plonger dans la viande. .

Merci!

Était-ce utile?

La solution

Il existe quelques algorithmes qui conviennent à cela:

ARTMAP: les groupes s'opposent par probabilité (ce n'est pas rapide, mais c'est la meilleure chose à faire pour votre problème, OMI)

ARTMAP contient un groupe d’attributs communs et détermine la probabilité de similitude via un pourcentage. ARTMAP

KMeans: Ceci sépare les vecteurs de la distance qui les sépare KMeans: Wikipedia

PCA: séparera la moyenne de toutes les valeurs des différents bits. C’est ce que vous utiliseriez pour la détection des visages et la soustraction d’arrière-plan dans Computer Vision. PCA

Autres conseils

Ceci est similaire à la cette question , où l'OP voulait construire un système de recommandation. En résumé, nous disposons d’un ensemble de données de formation comprenant les évaluations des utilisateurs par rapport aux films (1 à 5 étoiles par exemple) et un ensemble d’attributs pour chaque film (année, genre, acteurs, ..). Nous souhaitons créer un système de recommandation afin qu’il fournisse un classement possible à des films invisibles. Les données inpt ressemblent donc à:

user movie   year   genre   ...    | rating
---------------------------------------------
  1    1     2006   action         |    5
  3    2     2008   drama          |    3.5
  ...

et pour un film non classé X:

10    20     2009   drama   ?

nous voulons prédire une note. En procédant de la sorte pour tous les films invisibles, le tri par classement prévu et la sortie du top 10 vous donnent un système de recommandation.

La méthode la plus simple consiste à utiliser un algorithme k-voisin le plus proche . Parmi les films notés, recherchez le "plus proche" " les uns au film X, et combiner leurs cotes pour produire une prédiction. Cette approche a l’avantage d’être très simple à mettre en oeuvre facilement à partir de zéro.

Il existe d’autres approches plus sophistiquées. Par exemple, vous pouvez créer un arbre de décision , adapter un ensemble de règles aux données de formation. Vous pouvez également utiliser les réseaux bayésiens , réseaux de neurones artificiels , machines à vecteurs de support , parmi beaucoup d'autres ... Passer par chacun de ces domaines ne sera pas facile pour quelqu'un sans les antécédents appropriés. Néanmoins, je pense que vous utiliseriez un outil / une bibliothèque externe. Vous semblez maintenant connaître Bayesian Networks, donc un simple réseau naïf bayésien pourrait en fait être très puissant. L’un des avantages est qu’il permet de prédire les données manquantes.

L’idée principale serait un peu la même; prenez les données que vous avez en main, entraînez un modèle, puis utilisez-le pour prédire la classe de nouvelles instances.

Si vous voulez jouer avec différents algorithmes dans un paquet intuitif simple qui ne nécessite aucune programmation, je vous suggère de regarder Weka (mon premier choix), Orange ou RapidMiner . La partie la plus difficile serait de préparer le jeu de données au format requis. Le reste est aussi simple que de choisir quel algorithme et de l’appliquer (le tout en quelques clics!)

Je suppose que pour ceux qui ne souhaitent pas trop entrer dans les détails, je vous recommanderais d'utiliser la méthode du voisin le plus proche, car elle est intuitive et facile à mettre en œuvre. Vous pouvez toujours utiliser Weka (ou l’un des autres outils) mérite d’être étudié.

L’algorithme du plus proche voisin K est peut-être ce qu’il vous faut.

Découvrez certains travaux des meilleures équipes du prix netflix .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top