在当今的数字时代,Python推荐算法已经成为个性化服务的核心技术。无论是电商平台的商品推荐、视频网站的内容推送,还是音乐应用的歌单定制,背后都离不开推荐系统的支持。本教程将手把手教你使用Python实现一个基础但功能完整的协同过滤推荐系统,即使你是编程小白,也能轻松上手!
协同过滤(Collaborative Filtering)是推荐系统中最经典的方法之一。它的核心思想是:“和你兴趣相似的人喜欢的东西,你也可能会喜欢”。我们主要实现的是基于用户的协同过滤(User-Based Collaborative Filtering),即通过计算用户之间的相似度来预测目标用户对未评分物品的兴趣。
首先,确保你已安装Python(建议3.7+)。然后打开终端或命令提示符,运行以下命令安装所需库:
pip install numpy pandas scikit-learn 我们用一个简单的字典来模拟用户对电影的评分数据。每个用户对部分电影进行了1~5分的打分。
import numpy as npimport pandas as pdfrom sklearn.metrics.pairwise import cosine_similarity# 模拟用户-电影评分数据ratings = { 'Alice': {'Inception': 5, 'Titanic': 3, 'Avengers': 4}, 'Bob': {'Inception': 4, 'Titanic': 2, 'Avengers': 5, 'Interstellar': 4}, 'Charlie': {'Inception': 2, 'Titanic': 5, 'Interstellar': 3}, 'David': {'Titanic': 4, 'Avengers': 3, 'Interstellar': 5}} 为了便于计算,我们将字典转换为Pandas DataFrame,形成一个评分矩阵,缺失值用0填充(实际项目中可考虑用均值等更高级方法)。
# 转换为DataFramedf = pd.DataFrame(ratings).fillna(0).Tprint(df) 输出结果类似:
Inception Titanic Avengers InterstellarAlice 5.0 3.0 4.0 0.0Bob 4.0 2.0 5.0 4.0Charlie 2.0 5.0 0.0 3.0David 0.0 4.0 3.0 5.0 我们使用余弦相似度(Cosine Similarity)来衡量用户之间的相似程度。相似度越高,说明两个用户的兴趣越接近。
# 计算用户之间的余弦相似度user_similarity = cosine_similarity(df)user_similarity_df = pd.DataFrame(user_similarity, index=df.index, columns=df.index)print(user_similarity_df) 现在,我们编写一个函数,为目标用户推荐他尚未评分的电影。基本思路是:找出与目标用户最相似的K个用户,加权平均他们对某部电影的评分,作为预测分。
def recommend_movies(target_user, df, similarity_df, k=2): # 获取目标用户未评分的电影 target_ratings = df.loc[target_user] unrated_movies = target_ratings[target_ratings == 0].index.tolist() recommendations = {} for movie in unrated_movies: weighted_sum = 0 similarity_sum = 0 for other_user in df.index: if other_user == target_user: continue # 如果其他用户评过分 if df.loc[other_user, movie] > 0: sim = similarity_df.loc[target_user, other_user] weighted_sum += sim * df.loc[other_user, movie] similarity_sum += abs(sim) if similarity_sum > 0: predicted_rating = weighted_sum / similarity_sum recommendations[movie] = predicted_rating # 按预测分排序 sorted_recs = sorted(recommendations.items(), key=lambda x: x[1], reverse=True) return sorted_recs[:k] 让我们为用户Alice推荐两部她还没看过的电影:
# 为Alice推荐recs = recommend_movies('Alice', df, user_similarity_df, k=2)print("给 Alice 的推荐:")for movie, score in recs: print(f" {movie}: 预测评分 {score:.2f}") 可能的输出:
给 Alice 的推荐: Interstellar: 预测评分 4.25 这个基础版的基于用户的推荐算法已经能工作,但在真实场景中还需考虑更多因素:
恭喜你!你已经成功用Python实现了一个简单的电影推荐系统实现。虽然这只是推荐算法的冰山一角,但它为你打开了通往智能推荐世界的大门。接下来,你可以尝试用真实数据集(如MovieLens)进行实验,或者探索更先进的深度学习推荐模型。记住,实践是最好的老师——动手改代码、调参数、看结果,你会进步飞快!
掌握Python推荐算法,让你的应用拥有“读懂人心”的能力!
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125648.html