2010-11-20 3 views
17

S'il vous plaît soyez patient avec mon écriture, comme mon anglais n'est pas compétent. En tant que programmeur, je veux en savoir plus sur l'algorithme, ou l'intelligence d'apprentissage automatique, qui sont implémentés sous les systèmes de recommandation ou les systèmes associés. Par exemple, l'exemple le plus évident serait d'Amazon. Ils ont un très bon système de recommandation. Ils apprennent à savoir: si vous aimez cette , vous pouvez également vous que, ou autre chose comme: Quel est le pourcentage de personnes comme cette et qui ensemble.Comment puis-je implémenter un moteur de recommandation?

Bien sûr, je sais qu'Amazon est un grand site web et ils ont investi beaucoup de cerveaux et d'argent dans ces systèmes. Mais, sur le noyau de base, comment pouvons-nous mettre en œuvre quelque chose comme ça dans notre base de données? Comment pouvons-nous identifier comment un objet se rapporte à l'autre? Comment pouvons-nous construire une unité statistique qui gère ce genre de chose?

Je serais reconnaissant si quelqu'un peut signaler certains algorithmes. Ou, fondamentalement, souligner quelques bonnes références directes/livres que nous pouvons tous apprendre. Merci à tous!

+0

Amazon [brevet] (http://www.google.com/patents/US7113917) décrit leur approche en profondeur. – arao6

Répondre

18

Il existe 2 types différents de moteurs de recommandation. Le plus simple est basé sur les articles, c'est-à-dire "les clients qui ont acheté le produit A ont également acheté le produit B". C'est facile à mettre en œuvre. Stocke une matrice symétrique creuse nxn (où n est le nombre d'éléments). Chaque élément (m [a] [b]) est le nombre de fois que quelqu'un a acheté l'élément 'a' avec l'élément 'b'.

L'autre est basé sur l'utilisateur. C'est "les gens comme vous aiment souvent des choses comme ça". Une solution possible à ce problème est le clustering k-means. c'est-à-dire construire un ensemble de clusters où des utilisateurs de goûts similaires sont placés dans le même cluster et faire des suggestions en fonction des utilisateurs d'un même cluster.

Une meilleure solution, mais encore plus compliquée est une technique appelée Restricted Boltzmann Machines. Il y a une introduction à eux here

+4

@HTa: La distinction entre «similarité client» et «similarité de produit» que dessine @dan_waterworth est la ligne de démarcation la plus fondamentale parmi les stratégies de moteur de recommandation. Cependant, les termes «machines à boltzmann restreintes» et «regroupement de k-means» devraient être considérés comme des substitutions pour «quelle que soit la technique d'apprentissage que vous voulez utiliser». Soit la similarité du client ou la similarité du produit peuvent être faites avec une matrice et soit peut être fait avec A.I./stats/M.L. Vous pouvez lire sur Wikipedia. – isomorphismes

0

Je pense que vous parlez de knowledge base systems. Je ne me souviens pas du langage de programmation (peut-être LISP), mais il y a des implémentations. Regardez également OWL.

3

Une première tentative pourrait ressembler à ceci:

//First Calculate how often any product pair was bought together 
//The time/memory should be about Sum over all Customers of Customer.BoughtProducts^2 
Dictionary<Pair<ProductID,ProductID>> boughtTogether=new Dictionary<Pair<ProductID,ProductID>>(); 
foreach(Customer in Customers) 
{ 
    foreach(product1 in Customer.BoughtProducts) 
     foreach(product2 in Customer.BoughtProducts) 
      { 
       int counter=boughtTogether[Pair(product1,product2)] or 0 if missing; 
       counter++; 
       boughtTogether[Pair(product1,product2)]=counter; 
      } 
} 

boughtTogether.GroupBy(entry.Key.First).Select(group.OrderByDescending(entry=>entry.Value).Take(10).Select(new{key.Second as ProductID,Value as Count})); 

D'abord, je calcule la fréquence de chaque paire de produits a été acheté ensemble, puis je les groupe par le produit et sélectionner les 20 premiers autres produits achetés avec elle . Le résultat devrait être mis dans un genre de dictionnaire clé par ID de produit.

Cela peut être trop lent ou trop coûteux pour les grandes bases de données.

Questions connexes