Comment créer un système de recommandation simple en Python
Les systèmes de recommandation sont conçus pour aider les gens à découvrir et à sélectionner des éléments qui peuvent les intéresser. Python fournit une multitude de bibliothèques et d'outils qui peuvent nous aider à créer un système de recommandation simple mais efficace. Cet article expliquera comment utiliser Python pour créer un système de recommandation de filtrage collaboratif basé sur l'utilisateur et fournira des exemples de code spécifiques.
Le filtrage collaboratif est un algorithme courant pour les systèmes de recommandation. Il déduit les similitudes entre les utilisateurs en fonction des données d'historique comportemental des utilisateurs, puis utilise ces similitudes pour prédire et recommander des éléments. Nous utiliserons l'ensemble de données MovieLens, qui contient un ensemble d'évaluations de films par les utilisateurs. Tout d'abord, nous devons installer les bibliothèques requises :
pip install pandas scikit-learn
Ensuite, nous importerons les bibliothèques requises et chargerons l'ensemble de données MovieLens :
import pandas as pd from sklearn.model_selection import train_test_split # 加载数据集 data = pd.read_csv('ratings.csv')
L'ensemble de données contient userId
、movieId
和rating
trois colonnes, représentant respectivement l'ID utilisateur, l'ID du film et la note. Ensuite, nous divisons l'ensemble de données en ensembles de formation et de test :
train_data, test_data = train_test_split(data, test_size=0.2, random_state=42)
Maintenant, nous pouvons créer le système de recommandation. Ici, nous utiliserons la similarité cosinus entre les utilisateurs comme mesure de similarité. Nous allons créer deux dictionnaires pour stocker les scores de similarité des utilisateurs et des films :
# 计算用户之间的相似度 def calculate_similarity(train_data): similarity = dict() for user in train_data['userId'].unique(): similarity[user] = dict() user_ratings = train_data[train_data['userId'] == user] for movie in user_ratings['movieId'].unique(): similarity[user][movie] = 1.0 return similarity # 计算用户之间的相似度得分 def calculate_similarity_score(train_data, similarity): for user1 in similarity.keys(): for user2 in similarity.keys(): if user1 != user2: user1_ratings = train_data[train_data['userId'] == user1] user2_ratings = train_data[train_data['userId'] == user2] num_ratings = 0 sum_of_squares = 0 for movie in user1_ratings['movieId'].unique(): if movie in user2_ratings['movieId'].unique(): num_ratings += 1 rating1 = user1_ratings[user1_ratings['movieId'] == movie]['rating'].values[0] rating2 = user2_ratings[user2_ratings['movieId'] == movie]['rating'].values[0] sum_of_squares += (rating1 - rating2) ** 2 similarity[user1][user2] = 1 / (1 + (sum_of_squares / num_ratings) ** 0.5) return similarity # 计算电影之间的相似度得分 def calculate_movie_similarity_score(train_data, similarity): movie_similarity = dict() for user in similarity.keys(): for movie in train_data[train_data['userId'] == user]['movieId'].unique(): if movie not in movie_similarity.keys(): movie_similarity[movie] = dict() for other_movie in train_data[train_data['userId'] == user]['movieId'].unique(): if movie != other_movie: movie_similarity[movie][other_movie] = similarity[user][other_user] return movie_similarity # 构建推荐系统 def build_recommendation_system(train_data, similarity, movie_similarity): recommendations = dict() for user in train_data['userId'].unique(): user_ratings = train_data[train_data['userId'] == user] recommendations[user] = dict() for movie in train_data['movieId'].unique(): if movie not in user_ratings['movieId'].unique(): rating = 0 num_movies = 0 for other_user in similarity[user].keys(): if movie in train_data[train_data['userId'] == other_user]['movieId'].unique(): rating += similarity[user][other_user] * train_data[(train_data['userId'] == other_user) & (train_data['movieId'] == movie)]['rating'].values[0] num_movies += 1 if num_movies > 0: recommendations[user][movie] = rating / num_movies return recommendations # 计算评价指标 def calculate_metrics(recommendations, test_data): num_users = 0 sum_of_squared_error = 0 for user in recommendations.keys(): if user in test_data['userId'].unique(): num_users += 1 for movie in recommendations[user].keys(): if movie in test_data[test_data['userId'] == user]['movieId'].unique(): predicted_rating = recommendations[user][movie] actual_rating = test_data[(test_data['userId'] == user) & (test_data['movieId'] == movie)]['rating'].values[0] sum_of_squared_error += (predicted_rating - actual_rating) ** 2 rmse = (sum_of_squared_error / num_users) ** 0.5 return rmse # 计算用户之间的相似度 similarity = calculate_similarity(train_data) # 计算用户之间的相似度得分 similarity = calculate_similarity_score(train_data, similarity) # 计算电影之间的相似度得分 movie_similarity = calculate_movie_similarity_score(train_data, similarity) # 构建推荐系统 recommendations = build_recommendation_system(train_data, similarity, movie_similarity) # 计算评价指标 rmse = calculate_metrics(recommendations, test_data)
Enfin, nous pouvons afficher les résultats et les métriques d'évaluation du système de recommandation :
print(recommendations) print('RMSE:', rmse)
Avec l'exemple de code ci-dessus, nous avons réussi à créer un dictionnaire basé sur l'utilisateur. modèle dans le système de recommandation de filtrage collaboratif Python et calculé ses indicateurs d'évaluation. Bien entendu, il ne s’agit que d’un exemple simple, et les systèmes de recommandation actuels nécessitent des algorithmes plus complexes et des ensembles de données plus volumineux pour obtenir des résultats de recommandation plus précis.
Pour résumer, Python fournit des bibliothèques et des outils puissants pour créer des systèmes de recommandation. Nous pouvons utiliser des algorithmes de filtrage collaboratif pour déduire des similitudes entre les utilisateurs et faire des recommandations basées sur ces similitudes. J'espère que cet article pourra aider les lecteurs à comprendre comment créer un système de recommandation simple mais efficace en Python et fournir quelques idées pour explorer davantage le domaine des systèmes de recommandation.
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!