Python 推荐系统
推荐系统是一种使用Python的工具,根据用户的偏好和过去行为建议物品或内容。这种技术利用算法预测用户未来的偏好,从而为他们提供最相关的内容。
这个系统的范围很广泛,在电子商务、流媒体服务和社交媒体等各行业都有广泛的应用。通过这些系统可以推荐产品、电影、音乐、书籍等等。提供个性化推荐不仅有助于培养客户参与度和忠诚度,还可以促进销售。
推荐系统的类型
基于内容的推荐系统
这种系统的操作基于用户可以接收与他们之前接触过的相似物品的推荐。这种系统利用算法来找到与用户偏好相似的物品,并创建一个根据用户定制的推荐列表。在这种设置中,算法分析与物品相关的数据,比如其特点和用户评分,以确定要提议的内容。
步骤
- 第一步 - 导入必要的库。
-
第二步 - 加载数据集。
-
第三步 - 预处理数据。
-
第四步 - 计算相似矩阵。
-
第五步 - 对于每个用户 –
- 选择他们与之互动过的物品。
-
对于在第5a步选择的每个物品 –
- 检索它与其他所有物品的相似度分数。
-
使用用户的评分作为权重,计算相似度分数的加权平均值。
-
基于加权相似度分数的降序排序物品。
-
向用户推荐前N个物品。
- 选择他们与之互动过的物品。
-
第六步 - 返回所有用户的推荐。
示例
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文件加载电影数据到一个dataframe中。我们通过fit_transform()函数将电影描述转换成矩阵,并计算余弦相似性矩阵。
然后我们定义一个函数,它以电影标题为参数,并在dataframe中检索电影标题的索引(如果存在)。
然后我们创建一个包含传入参数电影标题与所有其他电影标题之间的相似性得分的元组列表。每个元组包含一个索引和相似性得分。然后我们通过索引dataframe来显示电影标题列表。
输出
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构建推荐系统提供了多种选择,可以简化创建和定制的过程。然而,像任何编码工作一样,开发推荐系统时可能会出现潜在问题。了解这些典型的复杂情况并采取措施来解决它们对于确保推荐系统的成功至关重要。
最终,关键是要记住推荐系统可以是一个极其有效的资产,值得投资时间和精力来确保它被正确构建并正常运行。