Python 推荐系统
推荐系统是Python中的一种工具,它根据用户的偏好和过去的行为向用户推荐项目或内容。这项技术利用算法来预测用户的未来偏好,从而为他们提供最相关的內容。
该系统的范围非常广泛,在电子商务、流媒体服务和社交媒体等各个行业都有广泛的应用。产品、电影、音乐、书籍等等都可以通过这些系统进行推荐。提供个性化推荐不仅有助于培养客户参与度和忠诚度,还可以促进销售。
推荐系统的类型
基于内容的推荐系统
这些系统基于这样的理念:用户可以收到与他们之前参与过的项目类似的项目的推荐。这种系统利用算法来找出与用户偏好非常相似的项目,目的是创建一个适合用户的建议列表。在这个设置中,算法会分析与项目相关的数据,例如其属性和用户评分,以确定要推荐什么。
算法
步骤 1 − 导入必要的库
步骤 2 − 加载数据集
步骤 3 − 预处理数据
步骤 4 − 计算相似性矩阵
步骤 5 − 对于每个用户 −
选择他们交互过的项目
对于步骤 5a 中选择的每个项目 −
检索它与所有其他项目的相似性分数
使用用户的评分作为权重计算相似性分数的加权平均值
根据项目的加权相似性分数以降序排列项目
向用户推荐前 N 个项目
步骤 6 − 返回所有用户的推荐。
示例
import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # Load data data = pd.read_csv('movies.csv') # Compute TF-IDF vectors for each movie tfidf = TfidfVectorizer(stop_words='english') tfidf_matrix = tfidf.fit_transform(data['description']) # Compute cosine similarity between all movies cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix) # Function to get top 10 similar movies based on input movie def get_recommendations(title): idx = data[data['title'] == title].index[0] sim_scores = list(enumerate(cosine_sim[idx])) sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) sim_scores = sim_scores[1:11] movie_indices = [i[0] for i in sim_scores] return data.iloc[movie_indices] # Example usage: get top 10 movies similar to 'The Godfather' get_recommendations('The Godfather')
我们将电影数据从本地 CSV 文件加载到数据框中。我们使用 fit_transform() 函数转换电影描述来计算矩阵,并计算余弦相似性矩阵。
然后,我们定义一个函数,该函数以电影标题作为参数,如果电影标题存在于数据框中,则检索其索引。
然后,我们创建一个元组列表,其中包含作为参数传递的电影标题与所有其他电影标题之间的相似性分数。每个元组都包含一个索引及其相似性分数。然后,我们通过索引数据框来显示电影标题列表。
输出
title \ 783 The Godfather 1512 The Godfather: Part II 1103 Casino 3509 Things to Do in Denver When 1246 Snatch 3094 Road to Perdition 2494 Scarface 1244 Following 2164 Dancer 2445 The Day of the Jackal
协同过滤推荐系统
相反,这些系统依赖其他用户的数据来生成推荐。这种类型的系统比较不同用户的偏好和行为,然后推荐其他具有类似品味的用户可能喜欢的项目。与基于内容的系统相比,协同过滤通常更准确,因为它在生成推荐时考虑了多个用户的意见。
算法
步骤 1 − 导入必要的库。
步骤 2 − 加载包含用户评分的“ratings.csv”文件。
步骤 3 − 创建“user_item_matrix”将用户评分数据转换为矩阵
步骤 4 − 使用余弦相似度计算用户评分的相似度。
步骤 5 − 识别相似的用户
步骤 6 − 计算平均评分。
步骤 7 − 选择目标用户 ID。
步骤 8 − 打印电影 ID 和评分。
示例
import pandas as pd from sklearn.metrics.pairwise import cosine_similarity # Load data ratings_data = pd.read_csv('ratings.csv') # Create user-item matrix user_item_matrix = pd.pivot_table(ratings_data, values='rating', index='userId', columns='movieId') # Calculate cosine similarity between users user_similarity = cosine_similarity(user_item_matrix) # Get top n similar users for each user def get_top_similar_users(similarity_matrix, user_index, n=10): similar_users = similarity_matrix[user_index].argsort()[::-1] return similar_users[1:n+1] # Get recommended items for a user based on similar users def get_recommendations(user_id, user_similarity, user_item_matrix, n=10): similar_users = get_top_similar_users(user_similarity, user_id, n) recommendations = user_item_matrix.iloc[similar_users].mean(axis=0).sort_values(ascending=False).head(n) return recommendations # Example usage user_id = 1 recommendations = get_recommendations(user_id, user_similarity, user_item_matrix) print("Top 10 recommended movies for user", user_id) print(recommendations)
输出
Top 10 recommended movies for user 1 movieId 1196 5.000000 50 5.000000 1210 5.000000 260 5.000000 1198 5.000000 2571 5.000000 527 5.000000 1197 5.000000 2762 5.000000 858 4.961538
结论
创建推荐系统任务可能会给程序员带来很大的复杂性,但它是一个可以带来巨大好处的宝贵工具。使用 Python 来构建推荐系统提供了多种可以简化创建和定制过程的选项。但是,与任何编码工作一样,在开发推荐系统时可能会出现潜在问题。了解这些常见问题并采取措施解决这些问题对于确保推荐系统的成功至关重要。
最终,务必记住,推荐系统可以成为一个极其强大的工具,因此值得投入必要的时间和精力来确保其正确构建并最佳运行。