利用Python进行简单的推荐系统实现

烟雨江南 2024-05-12 ⋅ 22 阅读

推荐系统是机器学习领域一个重要的应用方向。它的目标是根据用户的喜好和行为,为用户提供个性化的推荐,以帮助用户发现新的内容和商品。本文将介绍用Python实现一个简单的推荐系统。

数据准备

首先,我们需要准备一个用于推荐的数据集。这个数据集可以是用户对内容的评分表或者购买记录表。在本文中,我们将使用一个模拟的数据集,其中包含用户对不同电影的评分。

import pandas as pd

data = {'user_id': ['user1', 'user1', 'user1', 'user1', 'user2', 'user2', 'user2', 'user2', 'user3', 'user3', 'user3'],
        'movie_id': ['movie1', 'movie2', 'movie3', 'movie4', 'movie1', 'movie3', 'movie5', 'movie6', 'movie2', 'movie3', 'movie4'],
        'rating': [5, 4, 2, 3, 4, 5, 1, 2, 3, 2, 4]}

df = pd.DataFrame(data)

以上代码创建了一个包含用户ID、电影ID和评分的数据表。

构建推荐模型

我们将使用基于内容的协同过滤算法来构建推荐模型。这个算法首先计算用户对电影的兴趣向量,并利用这些向量来计算电影之间的相似度。然后,根据用户的历史记录和电影的相似度来进行推荐。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import linear_kernel

# 创建一个TF-IDF向量器
tfidf = TfidfVectorizer()

# 计算电影的TF-IDF向量
movie_vectors = tfidf.fit_transform(df['movie_id'])

# 计算电影之间的余弦相似度
similarity_matrix = linear_kernel(movie_vectors, movie_vectors)

# 基于用户历史记录的推荐
def get_recommendations(user_id):
    user_movies = df[df['user_id'] == user_id]['movie_id']
    movie_indices = [df[df['movie_id'] == m].index[0] for m in user_movies]
    similar_movies = []
    for idx in movie_indices:
        similar_movies += list(similarity_matrix[idx].argsort()[-5:][::-1])
    similar_movies = list(set(similar_movies))
    recommended_movies = [df['movie_id'][idx] for idx in similar_movies if df['movie_id'][idx] not in user_movies]
    return recommended_movies

以上代码首先使用TF-IDF向量器计算电影的TF-IDF向量,然后计算电影之间的余弦相似度。接下来,我们定义一个函数get_recommendations,根据用户的历史记录找出相似度最高的5部电影,并返回推荐的电影列表。

进行推荐

现在我们可以使用上面定义的推荐模型来为用户生成推荐。

user_id = 'user1'
recommended_movies = get_recommendations(user_id)
print(f"为用户'{user_id}'推荐的电影是:{recommended_movies}")

在上面的代码中,我们指定用户ID为user1,然后调用get_recommendations函数生成推荐的电影列表。最后,打印推荐结果。

结论

本文介绍了用Python实现一个简单的推荐系统的方法。推荐系统是一个复杂的领域,需要深入研究和不断优化。然而,通过上面的示例代码,我们可以了解推荐系统的基本原理和实现过程。希望本文对你有所帮助!


全部评论: 0

    我有话说: