🔥作者主页:疯狂行者🔥 💖✌java领域优质创作者,专注于Java、大数据、python、小程序技术领域技术交流✌💖
💖文末获取源码💖
精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻Java精彩实战项目案例
Java精彩新手项目案例
Python精彩新手项目案例
文章目录
前言
协同过滤算法:介绍、公式及其应用
一、介绍
协同过滤(Collaborative Filtering)是一种用于推荐系统的算法,通过分析用户与物品之间的历史行为数据来预测用户可能感兴趣的物品。协同过滤可以分为两类:基于用户的协同过滤和基于物品的协同过滤。基于用户的协同过滤假设相似的用户具有相似的兴趣,而基于物品的协同过滤假设用户对相似的物品有相似的评分。
二、算法公式
2.1 基于用户的协同过滤
基于用户的协同过滤通过计算用户之间的相似度来进行推荐。常用的相似度计算方法有余弦相似度、皮尔逊相关系数等。
2.2 基于物品的协同过滤
基于物品的协同过滤通过计算物品之间的相似度来进行推荐。常用的相似度计算方法也包括余弦相似度和皮尔逊相关系数。
其中,Uij表示同时评价过物品i和物品j的用户集合,rui表示用户u对物品i的评分。
三、应用的Python代码
3.1 数据展示
为了展示数据结构,以下是示例数据:
movies.csv:
ratings.csv:
3.2 代码实现
import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
from scipy.sparse import csr_matrix
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
movies = pd.DataFrame({
'movieId': [1, 2, 3, 4, 5],
'title': ['Toy Story (1995)', 'Jumanji (1995)', 'Grumpier Old Men (1995)', 'Waiting to Exhale (1995)', 'Father of the Bride Part II (1995)'],
'genres': ['Adventure|Animation|Children|Comedy|Fantasy', 'Adventure|Children|Fantasy', 'Comedy|Romance', 'Comedy|Drama', 'Comedy']
})
ratings = pd.DataFrame({
'userId': [1, 1, 1, 1, 1, 2, 2, 2, 2],
'movieId': [1, 3, 6, 47, 50, 1, 2, 47, 56],
'rating': [4.0, 4.0, 4.0, 5.0, 5.0, 5.0, 3.0, 4.0, 4.0],
'timestamp': [964982703, 964981247, 964982224, 964983815, 964982931, 964982224, 964983248, 964982931, 964982703]
})
# 创建用户-物品评分矩阵
user_movie_matrix = ratings.pivot(index='userId', columns='movieId', values='rating').fillna(0)
user_movie_matrix_sparse = csr_matrix(user_movie_matrix.values)
# 计算用户之间的相似度
user_similarity = cosine_similarity(user_movie_matrix_sparse)
# 根据用户相似度进行推荐
def get_user_based_recommendations(user_id, user_movie_matrix, user_similarity, top_n=10):
user_index = user_movie_matrix.index.get_loc(user_id)
similarity_scores = user_similarity[user_index]
user_ratings = user_movie_matrix.iloc[user_index]
# 预测用户未评分的物品
weighted_sum = user_similarity[user_index].dot(user_movie_matrix)
sum_of_weights = np.abs(user_similarity[user_index]).sum(axis=0)
predicted_ratings = weighted_sum / sum_of_weights
# 将用户已评分的物品评分设置为0,不纳入推荐
predicted_ratings[user_ratings > 0] = 0
# 推荐评分最高的物品
recommendations = pd.Series(predicted_ratings, index=user_movie_matrix.columns).sort_values(ascending=False).head(top_n)
return recommendations
# 具体调用:用户1推荐电影
user_id = 1
recommendations = get_user_based_recommendations(user_id, user_movie_matrix, user_similarity)
recommended_movies = movies[movies['movieId'].isin(recommendations.index)]
print(recommended_movies)
# 生成用户相似度矩阵热力图
plt.figure(figsize=(10, 7))
sns.heatmap(user_similarity, annot=True, cmap='coolwarm', xticklabels=user_movie_matrix.index, yticklabels=user_movie_matrix.index)
plt.title('User Similarity Matrix')
plt.xlabel('User ID')
plt.ylabel('User ID')
plt.show()
结论
协同过滤算法是一种有效的推荐系统算法,通过分析用户与物品之间的历史行为数据,能够为用户提供个性化的推荐。本文介绍了基于用户和基于物品的协同过滤算法的基本原理及其实现方法,并通过Python代码展示了如何使用协同过滤算法进行推荐。希望本文对您理解和应用协同过滤算法有所帮助。
总结
大家点赞、收藏、关注、评论啦 、
打卡 文章 更新 109/ 365天
精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻
Java精彩实战项目案例
Java精彩新手项目案例
Python精彩新手项目案例