协同过滤(概念、相似度计算方法+例题)

前前排先说一下:写完的东西一定记得保存!要不网页一关就啥都没了💔💔💔



协同过滤是一种推荐算法,它和传统的内容过滤不同;传统过滤方法可能会存在误差(比如把用户感兴趣的内容滤掉或者推荐给用户不喜欢的内容)。

协同过滤不仅通过分析用户的喜好(点击量、浏览页面),还可以扩大范围网,通过计算与该用户喜好相同的用户所喜欢的内容,通过后台计算,并把结果反馈给用户。

协同过滤的优点之一是它甚至可以代替用户直接给系统做出反馈,使操作更加智能化。

其中,协同过滤算法主要分为基于启发式和基于模型式两种。

而基于启发式的协同过滤算法,又可以分为基于用户的协同过滤算法和基于项目的协同过滤算法,这里主要讲基于用户的协同过滤算法


基于用户的协同过滤

因为这种计算总是和“邻居”相关,所以它又叫基于邻居的协同过滤。

1.1 方法步骤:

① 搜集用户信息,列出相关表格/矩阵。
② 按要求查找候选邻居,计算相似度。
③ 计算预测分值。

光看这三个步骤,估计也看不太明白,下边来细说一下。

第一条就不多说了,就是简单的信息搜查和信息规整,记得表格做的美观简明就ok。

第二条,候选邻居应该可以通过题目要求找到。(通俗的讲就是和你要预测的这个商品相关的用户,假设想预测你对商品A的期待值,

自适应过滤算法是一种在线学习的机器学习技术,常用于实时推荐系统、信号处理等领域。它可以根据用户的反馈动态调整模型参数,提高预测精度。这里举一个简单的例子,我们以协同过滤的用户-商品评分预测为例: **原数据示例**: 假设有一个电影评分数据集,包含用户ID(u_id),电影ID(m_id)以及评分(rating)。例如: | u_id | m_id | rating | | --- | --- | ------ | | 1 | A01 | 4 | | 1 | A02 | 5 | | 2 | A01 | 3 | | 2 | A03 | 4 | **伪代码示例 (基于用户-用户相似度的自适应过滤)**: ```python class AdaptiveFilter: def __init__(self): self.user_preferences = {} # 用户偏好字典 self.similarity_matrix = {} # 相似度矩阵 def update(self, user_id, movie_id, rating): if user_id not in self.user_preferences: self.user_preferences[user_id] = {movie_id: rating} else: self.user_preferences[user_id][movie_id] = rating # 计算并更新相似度矩阵 for ref_user in self.user_preferences.keys(): if ref_user != user_id and movie_id in self.user_preferences[ref_user]: similarity = calculate_similarity(user_id, ref_user) if (user_id, ref_user) not in self.similarity_matrix: self.similarity_matrix[(user_id, ref_user)] = similarity elif similarity > self.similarity_matrix[(user_id, ref_user)]: self.similarity_matrix[(user_id, ref_user)] = similarity def predict(self, target_user_id, target_movie_id): similar_users = [user_id for user_id, _ in self.similarity_matrix[target_user_id].items() if rating] weighted_average_rating = sum([self.user_preferences[similar_user][target_movie_id] * sim for similar_user, sim in self.similarity_matrix[target_user_id].items()]) return weighted_average_rating / len(similar_users) # 使用示例 filter = AdaptiveFilter() filter.update(1, 'A01', 4) # 用户1给'A01'打分4 filter.predict(1, 'A03') # 预测用户1对'A03'的评分 ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值