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

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

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

疯狂行者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值