卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章20963本站已运行3410

在Python中的推荐系统

在Python中的推荐系统

推荐系统是Python中的一个工具,它根据用户的偏好和过去的行为向用户推荐项目或内容。该技术利用算法来预测用户未来的偏好,从而为他们提供最相关的内容。

该系统的范围非常广泛,广泛应用于电子商务、流媒体服务和社交媒体等各个行业。产品、电影、音乐、书籍等都可以通过这些系统推荐。提供个性化推荐不仅有助于提高客户参与度和忠诚度,还可以促进销售。

推荐系统的类型

基于内容的推荐系统

这些操作的理念是,用户可以获得与他们以前接触过的项目相当的推荐。这种系统利用算法来查明与用户偏好非常相似的项目,目的是创建适合用户的建议列表。在此设置中,算法分析与商品相关的数据(例如其质量和用户评分),以确定提出哪些建议。

算法

  • 步骤 1 − 导入必要的库

  • 第 2 步 - 加载数据集

  • 步骤 3 - 预处理数据

  • 步骤 4 - 计算相似性矩阵

  • 第5步 − 对于每个用户 −

    • 选择他们已经互动过的项目

    • 对于在步骤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文件加载电影数据到一个数据帧中。我们通过使用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 构建推荐系统提供了多种选项,可以简化创建和定制过程。然而,与任何编码工作一样,开发推荐系统时可能会出现潜在问题。意识到这些典型的并发症并采取措施解决它们对于确保推荐系统的成功至关重要。

最终,重要的是要记住,推荐系统可以是一种非常强大的资产,因此值得投入必要的时间和精力来确保其正确构建并以最佳方式运行。

卓越飞翔博客
上一篇: 计算数组中元素的个数,其二进制表示中的1的个数是K的倍数
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏