Pour mettre en œuvre l'algorithme de recommandation de filtrage collaboratif, vous devez d'abord comprendre l'idée centrale et le processus de l'algorithme. L'idée centrale de cet algorithme peut être résumée comme suit : si a et b aiment la même série d'éléments (appelons b un voisin pour l'instant), alors a est susceptible d'aimer d'autres éléments que b aime. Le processus de mise en œuvre de l'algorithme peut être simplement résumé comme suit : 1. Déterminer les voisins d'un 2. Utiliser les voisins pour prédire le type d'articles qu'un pourrait aimer. 3. Recommander les éléments qu'un pourrait aimer à un.
La formule de base de l'algorithme est la suivante :
1. Similitude cosinus (trouver des voisins) :
2. . Formule de prédiction (Prédire le type d'articles qu'un objet pourrait aimer) :
À partir de ces deux formules seules, nous pouvons voir que le simple calcul selon ces deux formules nécessite un calcul. beaucoup de boucles et de jugement, et cela implique également des problèmes de tri, ce qui implique la sélection et l'utilisation d'algorithmes de tri. Ici, je choisis le tri rapide, je copie une section de tri rapide à partir d'Internet et je l'utilise directement. Bref, c'est très compliqué à mettre en œuvre, sans parler de l'efficacité dans le cas du big data.
Créez d'abord un tableau :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
En utilisant php+mysql, l'organigramme est le suivant :
Le code pour se connecter à la base de données et le stocker sous un tableau bidimensionnel est le suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Le code pour trouver la valeur Cos du Lion et des autres est le suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
Triez les valeurs Cos obtenues et utilisez le code de tri rapide comme suit (copié depuis Baidu) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Sélectionnez les 3 personnes avec les valeurs CoS les plus élevées comme voisins de Leo :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Il s'agit d'un tableau bidimensionnel. Les indices du premier niveau du tableau sont 0, 1 et 2, représentant 3 personnes. L'indice de deuxième niveau 0 représente l'ordre des voisins dans la table de données, par exemple, Jhon est la 0ème personne dans la table ; l'indice 1 représente la valeur Cos de Leo et l'indice 2, 3 et 4 ; représentent respectivement la paire voisine f et g , h rating.
Démarrer la prédiction. Le code de calcul pour Predict est le suivant :
Je calcule les valeurs prédites de Leo pour f, g, h respectivement. Il y a ici un problème, c'est-à-dire comment le résoudre si certains voisins ont des scores vides pour f, g, h. Par exemple, les évaluations de Jhon et Mary pour h sont vides. Instinctivement, j'ai pensé à utiliser if pour juger, et s'il est vide, ignorer cet ensemble de calculs, mais reste à déterminer si cela est raisonnable. Le code suivant n'écrit pas ceci en cas de jugement.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
$p_arr est le tableau recommandé pour Leo, son contenu est similaire à ce qui suit ;
Array ( [0] => Array ( [0] => ; 6 [ 1] => 4.2314002228795 ) [1] => Tableau ( [0] => 8 [1 ] => ; 0.45287424581774 ) )
f est la 6ème colonne, la valeur de prédiction est 4,23, g est la septième colonne, la valeur de prédiction est 2,65...
Après avoir calculé les valeurs Predict de f, g, h, il existe deux méthodes de traitement : l'une consiste à recommander au Lion les éléments avec des valeurs Predict supérieures à 3, l'autre consiste à trier les valeurs Predict du grand au petit, et Les 2 premiers éléments avec la valeur la plus élevée sont recommandés au Lion. Ce code n'a pas été écrit.Comme le montre l'exemple ci-dessus, la mise en œuvre de l'algorithme de recommandation est très gênante, nécessitant du bouclage, du jugement, une fusion de tableaux, etc. S’il n’est pas géré correctement, cela deviendra un fardeau pour le système. Il existe toujours les problèmes suivants dans le traitement réel :
1 Dans l'exemple ci-dessus, nous recommandons uniquement Leo, et nous savons déjà que Leo n'a pas évalué les éléments f, g, h. Dans un système réel, pour chaque utilisateur qui doit faire une recommandation, il est nécessaire de découvrir quels éléments il n'a pas évalués, ce qui représente une autre partie des frais généraux.
2. L'intégralité de la requête de table ne doit pas être effectuée dans le système actuel, certaines valeurs standard peuvent être définies. Par exemple : On retrouve la valeur Cos entre Lion et les autres personnes dans le tableau. Si la valeur est supérieure à 0,80, cela signifie qu'ils peuvent être voisins. De cette façon, lorsque je trouve 10 voisins, j'arrête de calculer la valeur Cos pour éviter d'interroger la table entière. Cette méthode peut également être utilisée de manière appropriée pour les éléments recommandés. Par exemple, je recommande uniquement 10 éléments et j'arrête de calculer la valeur de prévision après les avoir recommandés.
3. Au fur et à mesure que le système est utilisé, les éléments changeront également. Aujourd'hui, c'est fgh, et demain, ce sera peut-être xyz. Lorsque les éléments changent, la table de données doit être modifiée dynamiquement.
4. Des recommandations basées sur le contenu peuvent être introduites de manière appropriée pour améliorer l'algorithme de recommandation.
5. Problèmes de précision recommandés. La définition de différentes valeurs standard affectera la précision.
Résumé : Je pense que le problème essentiel est que l'efficacité de l'algorithme n'est pas élevée. Continuez à étudier et voyez s'il existe un meilleur algorithme de recommandation de filtrage collaboratif.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!