用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

Python自学    -  云代码空间

—— python自学——怎么学习python,自学python要多久?python+人工智能+人工智能+人工智能+大数据分析

Python实战 | 如何使用Python开发高效的推荐算法?

2023-07-12|359阅||

摘要:当你在网上购物时,为什么总会有一些商品被推荐给你?当你在看电影时,为什么总会出现“你可能喜欢”的电影推荐?这就是推荐算法在发挥作用了。推荐算法可以在海量数据中根据用户的兴趣和行为,为用户推荐个性化的内容。 而Python作为一种广泛应用于数据分析、机器学习等领域的编程语言,

当你在网上购物时,为什么总会有一些商品被推荐给你?当你在看电影时,为什么总会出现“你可能喜欢”的电影推荐?这就是推荐算法在发挥作用了。推荐算法可以在海量数据中根据用户的兴趣和行为,为用户推荐个性化的内容。

而Python作为一种广泛应用于数据分析、机器学习等领域的编程语言,非常适用于推荐算法的开发。

推荐算法的分类

在介绍如何使用Python进行推荐算法的开发之前,先来了解一下推荐算法的分类。根据推荐的方式,推荐算法可以分为以下几种:

  • 基于内容的推荐算法:该算法根据物品的属性和用户的历史行为,向用户推荐与其过去喜欢的物品相似的物品。

  • 协同过滤推荐算法:该算法根据用户的历史行为和其他用户的行为,向用户推荐其他用户喜欢的物品。

  • 混合推荐算法:该算法结合了基于内容的推荐算法和协同过滤推荐算法的优点,综合考虑物品本身的属性和用户之间的相似度,向用户推荐个性化的内容。

基于Python的推荐算法开发

本文以基于协同过滤推荐算法为例,介绍如何使用Python进行推荐算法的开发。

数据集的准备

首先准备一个数据集。数据集是推荐算法的基础,它包含了用户的行为数据和物品的属性数据。在本例中,我们将使用MovieLens数据集,该数据集包含了用户对电影的评分、电影的属性信息等数据。我们可以使用pandas库读取数据集,如下所示:


import pandas as pd

# 读取数据集
ratings = pd.read_csv('ratings.csv')
movies = pd.read_csv('movies.csv')

ratings.csv

userId movieId rating
1 1 4.0
1 3 3.0
2 1 3.5
3 1 5.0
3 2 2.5

movies.csv

movieId title genres
1 Toy Story (1995) Adventure
2 Jumanji (1995) Adventure
3 Grumpier Old Men (1995) Comedy
4 Waiting to Exhale (1995) Comedy
5 Father of the Bride Part II (1995) Comedy

数据集的处理

数据集的处理是推荐算法的关键步骤之一。在本例中,我们需要将数据集转换为用户-物品评分矩阵。矩阵的行表示用户,列表示物品,每个元素表示用户对物品的评分。我们可以使用pandas库将数据集转换为矩阵形式,如下所示:

import numpy as np

# 转换数据集为用户-物品评分矩阵
ratings_matrix = ratings.pivot(index='userId', columns='movieId', values='rating').fillna(0).values


接下来,我们将使用Python实现基于协同过滤的推荐算法。协同过滤算法分为两种:基于用户的协同过滤和基于物品的协同过滤。在本例中,我们将使用基于物品的协同过滤算法。

计算物品之间的相似度

首先计算物品之间的相似度。相似度可以使用皮尔逊相关系数等方法进行计算。在本例中,我们将使用余弦相似度作为相似度度量方法,它可以表示两个向量的夹角余弦值,如下所示:

from sklearn.metrics.pairwise import cosine_similarity

# 计算电影之间的相似度矩阵
item_similarities = cosine_similarity(ratings_matrix.T)

推荐电影

然后可以根据用户的历史评分以及物品之间的相似度,推荐电影给用户。具体我们可以计算用户对未评分电影的评分预测值,最后根据预测值排序,向用户推荐前N个电影。在本例中,我们将推荐Top 10电影给用户。


# 定义推荐函数
def recommend_movies(user_id, ratings_matrix, item_similarities, N=10):
    # 获取用户对电影的评分
    user_ratings = ratings_matrix[user_id, :]
    # 获取用户未评分的电影
    unrated_movies = np.where(user_ratings == 0)[0]
    # 计算用户对未评分电影的评分预测值
    scores = np.dot(item_similarities, user_ratings) / np.sum(item_similarities, axis=1)
    # 对预测值排序,推荐Top N电影
    top_movies = np.argsort(scores)[::-1][:N]
    # 返回推荐的电影
    return top_movies

# 使用示例
user_id = 0
top_movies = recommend_movies(user_id, ratings_matrix, item_similarities, N=10)
print(top_movies)

实战

在完成推荐算法的开发后,我们可以通过实战演练来验证算法的效果。具体地,我们可以随机选择一个用户,将其历史评分中20%的电影作为测试集,然后使用剩余80%的电影构建推荐模型,并根据测试集的评分,评估推荐模型的性能。在本例中,我们将使用均方根误差(RMSE)作为评估指标,RMSE越小表示推荐模型越准确。


from sklearn.metrics import mean_squared_error

# 随机选择一个用户
user_id = np.random.choice(ratings['userId'].unique())

# 将用户历史评分中20%的电影作为测试集
user_ratings = ratings[ratings['userId'] == user_id]
test_ratings = user_ratings.sample(frac=0.2, random_state=42)
train_ratings = user_ratings.drop(test_ratings.index)

# 构建推荐模型
train_matrix = train_ratings.pivot(index='userId', columns='movieId', values='rating').fillna(0).values
item_similarities = cosine_similarity(train_matrix.T)

# 评估推荐模型性能
test_matrix = test_ratings.pivot(index='userId', columns='movieId', values='rating').fillna(0).values
predicted_matrix = np.dot(item_similarities, train_matrix) / np.sum(item_similarities, axis=1).reshape(-1, 1)
rmse = np.sqrt(mean_squared_error(test_matrix[test_matrix.nonzero()], predicted_matrix[test_matrix.nonzero()]))

print(f"用户{user_id}的推荐模型RMSE为{rmse:.4f}")

技术总结

本文介绍了如何使用Python进行推荐算法的开发,以基于协同过滤的推荐算法为例,使用余弦相似度计算了物品之间的相似度,并根据相似度推荐Top 10电影给用户。最后,我们通过实战演练验证了推荐模型的性能。

顶 3踩 1收藏
文章评论
    发表评论