京公网安备 11010802034615号
经营许可证编号:京B2-20210330
协同过滤推荐算法是诞生时间最早,而且应用广泛的,著名的推荐算法。其最主要的功能进行是预测和推荐。协同过滤推荐算法可以通过对用户历史行为数据的挖掘,从而发现用户的偏好,并且基于不同的偏好,将用户划分为不同的群组,并推荐品味相似的商品。基于用户的协同过滤算法user-based collaboratIve filtering,是协同过滤推荐算法的极为重要的一个分类,今天小编主要给大家分享基于用户的协同过滤算法的原理和实现。
一、基于用户的协同过滤算法概念
基于用户(user-based)的协同过滤算法是通过,挖掘用户的历史行为数据,发现用户对商品或内容的偏好,并对这些偏好进行度量和打分。之后根据不同用户对相同商品或内容的态度以及偏好程度,来计算用户之间的相似度关系。基于用户的协同过滤,主要计算的是用户与用户之间的相似度,只需要找出相似用户喜欢的物品,并预测出目标用户对对应物品的评分,就能够找到评分最高的物品推荐给用户,这样能够挖掘用户的隐藏属性。
二、基于用户的协同过滤算法原理
基于用户的协同过滤算法主要包括以下两个步骤:
(1) 找到与目标用户兴趣相似的用户集合。
(2) 找到此集合中的用户感兴趣的,并且目标用户没有接触过的的物品推荐给目标用户。
基于用户User-CF算法的假设是目标用户和其他用户的兴趣、偏好相似,那么他们喜欢的东西都应该也相似,就是常说的人以群分。
基于用户的协同过滤算法适用于用户较少、用户个性化兴趣不太显著的情况,这样,在推荐过程中用户新的行为不一定会导致推荐结果的变化,但是如果用户过多,那么计算用户相似矩阵的代价就会太大。并且这一算法不能解决新用户进来的冷启动问题,新物品进来却可以较快地进行推荐。
三、算法实现
1.计算用户相似度
user-item:
movieId 1 2 3 4 5 6 7 8
userId
1 3.5 2.0 NaN 4.5 5.0 1.5 2.5 2.0
2 2.0 3.5 4.0 NaN 2.0 3.5 NaN 3.0
3 5.0 1.0 1.0 3.0 5.0 1.0 NaN NaN
4 3.0 4.0 4.5 NaN 3.0 4.5 4.0 2.0
5 NaN 4.0 1.0 4.0 NaN NaN 4.0 1.0
6 NaN 4.5 4.0 5.0 5.0 4.5 4.0 4.0
7 5.0 2.0 NaN 3.0 5.0 4.0 5.0 NaN
8 3.0 NaN NaN 5.0 4.0 2.5 3.0 4.0
# 构建共同的评分向量
def build_xy(user_id1, user_id2):
bool_array = df.loc[user_id1].notnull() & df.loc[user_id2].notnull()
return df.loc[user_id1, bool_array], df.loc[user_id2, bool_array]
#如此用户评分矩阵中用户1,和用户2的共同评分向量是
movieId
1 3.5
2 2.0
5 5.0
6 1.5
8 2.0
Name: 1, dtype: float64,
movieId
1 2.0
2 3.5
5 2.0
6 3.5
8 3.0
Name: 2, dtype: float64)
# 皮尔逊相关系数
def pearson(user_id1, user_id2):
x, y = build_xy(user_id1, user_id2)
mean1, mean2 = x.mean(), y.mean()
# 分母
denominator = (sum((x-mean1)**2)*sum((y-mean2)**2))**0.5
try:
value = sum((x - mean1) * (y - mean2)) / denominator
except ZeroDivisionError:
value = 0
return value
2.找到相似度最高的用户并进行推荐:
# 计算最相似的邻居
def computeNearestNeighbor(user_id, k=3):
return df.drop(user_id).index.to_series().apply(pearson, args=(user_id,)).nlargest(k)
#与用户3相似的前3个用户
userId
1 0.819782
6 0.801784
7 0.766965
Name: userId, dtype: float64
#推荐
def recommend(user_id):
# 找到最相似的用户id
nearest_user_id = computeNearestNeighbor(user_id).index[0]
print('最相似用户ID:')
print nearest_user_id
# 找出邻居评价过、但自己未曾评价的项目
# 结果:index是项目名称,values是评分
return df.loc[nearest_user_id, df.loc[user_id].isnull() & df.loc[nearest_user_id].notnull()].sort_values()
#对用户3进行推荐结果
最相似用户ID:
1
movieId
8 2.0
7 2.5
Name: 1, dtype: float64
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
在数字化商业环境中,数据已成为企业优化运营、抢占市场、规避风险的核心资产。但商业数据分析绝非“堆砌数据、生成报表”的简单 ...
2026-01-20定量报告的核心价值是传递数据洞察,但密密麻麻的表格、复杂的计算公式、晦涩的数值罗列,往往让读者望而却步,导致核心信息被淹 ...
2026-01-20在CDA(Certified Data Analyst)数据分析师的工作场景中,“精准分类与回归预测”是高频核心需求——比如预测用户是否流失、判 ...
2026-01-20在建筑工程造价工作中,清单汇总分类是核心环节之一,尤其是针对楼梯、楼梯间这类包含多个分项工程(如混凝土浇筑、钢筋制作、扶 ...
2026-01-19数据清洗是数据分析的“前置必修课”,其核心目标是剔除无效信息、修正错误数据,让原始数据具备准确性、一致性与可用性。在实际 ...
2026-01-19在CDA(Certified Data Analyst)数据分析师的日常工作中,常面临“无标签高维数据难以归类、群体规律模糊”的痛点——比如海量 ...
2026-01-19在数据仓库与数据分析体系中,维度表与事实表是构建结构化数据模型的核心组件,二者如同“骨架”与“血肉”,协同支撑起各类业务 ...
2026-01-16在游戏行业“存量竞争”的当下,玩家留存率直接决定游戏的生命周期与商业价值。一款游戏即便拥有出色的画面与玩法,若无法精准识 ...
2026-01-16为配合CDA考试中心的 2025 版 CDA Level III 认证新大纲落地,CDA 网校正式推出新大纲更新后的第一套官方模拟题。该模拟题严格遵 ...
2026-01-16在数据驱动决策的时代,数据分析已成为企业运营、产品优化、业务增长的核心工具。但实际工作中,很多数据分析项目看似流程完整, ...
2026-01-15在CDA(Certified Data Analyst)数据分析师的日常工作中,“高维数据处理”是高频痛点——比如用户画像包含“浏览次数、停留时 ...
2026-01-15在教育测量与评价领域,百分制考试成绩的分布规律是评估教学效果、优化命题设计的核心依据,而正态分布则是其中最具代表性的分布 ...
2026-01-15在用户从“接触产品”到“完成核心目标”的全链路中,流失是必然存在的——电商用户可能“浏览商品却未下单”,APP新用户可能“ ...
2026-01-14在产品增长的核心指标体系中,次日留存率是当之无愧的“入门级关键指标”——它直接反映用户对产品的首次体验反馈,是判断产品是 ...
2026-01-14在CDA(Certified Data Analyst)数据分析师的业务实操中,“分类预测”是高频核心需求——比如“预测用户是否会购买商品”“判 ...
2026-01-14在数字化时代,用户的每一次操作——无论是电商平台的“浏览-加购-下单”、APP的“登录-点击-留存”,还是金融产品的“注册-实名 ...
2026-01-13在数据驱动决策的时代,“数据质量决定分析价值”已成为行业共识。数据库、日志系统、第三方平台等渠道采集的原始数据,往往存在 ...
2026-01-13在CDA(Certified Data Analyst)数据分析师的核心能力体系中,“通过数据建立模型、实现预测与归因”是进阶关键——比如“预测 ...
2026-01-13在企业数字化转型过程中,业务模型与数据模型是两大核心支撑体系:业务模型承载“业务应该如何运转”的逻辑,数据模型解决“数据 ...
2026-01-12当前手游市场进入存量竞争时代,“拉新难、留存更难”成为行业普遍痛点。对于手游产品而言,用户留存率不仅直接决定产品的生命周 ...
2026-01-12