协同过滤算法:介绍、公式及其应用

🔥作者主页:疯狂行者🔥 💖✌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精彩新手项目案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂行者

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值