news 2026/7/19 3:20:40

协同过滤:让机器学会“物以类聚,人以群分“

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
协同过滤:让机器学会“物以类聚,人以群分“

协同过滤:让机器学会"物以类聚,人以群分"

引言

你有没有想过,Netflix 是怎么知道你可能喜欢哪部电影?豆瓣如何推荐你可能感兴趣的书?淘宝为什么总能猜中你想买什么?

这背后的核心技术之一就是协同过滤(Collaborative Filtering)。它是推荐系统中最经典、应用最广泛的算法之一。

今天我们通过一些生活化的例子,深入浅出地理解协同过滤的原理。

什么是协同过滤?

协同过滤的核心思想可以用一句话概括:

利用群体的智慧来进行推荐

具体来说,就是:

  • 找到和你相似的人,把他们喜欢的东西推荐给你(基于用户的协同过滤)
  • 找到和某个物品相似的物品,推荐给喜欢该物品的用户(基于物品的协同过滤)

让我们通过一个具体例子来理解。

例子1:豆瓣电影推荐

假设豆瓣有这样一个评分矩阵(5分制):

用户肖申克的救赎霸王别姬阿甘正传速度与激情变形金刚
小明554??
小红54522
小刚12155
小丽45421
5?5??

现在问题来了:你应该去看《霸王别姬》吗?

基于用户的协同过滤(User-Based CF)

思路:找到和你口味相似的人,看看他们的选择

  1. 计算用户相似度

你给《肖申克的救赎》打了5分,给《阿甘正传》打了5分。看看其他用户:

  • 小明:肖申克5分,阿甘4分 → 口味很像!
  • 小红:肖申克5分,阿甘5分 → 口味极其相似!
  • 小刚:肖申克1分,阿甘1分 → 口味完全相反
  • 小丽:肖申克4分,阿甘4分 → 口味比较像
  1. 利用相似用户的评分进行预测

小红和你最像,她给《霸王别姬》打了4分
小明也很像你,他给《霸王别姬》打了5分
小丽也比较像,她给了5分

预测:你可能会给《霸王别姬》打 4.5-5 分 → 强烈推荐!

同理,小红和小丽都不喜欢《速度与激情》和《变形金刚》(打了1-2分),所以也不推荐给你。

基于物品的协同过滤(Item-Based CF)

思路:找到和你已经喜欢的电影相似的其他电影

  1. 计算电影相似度

看看哪些电影经常被同样的人喜欢:

  • 喜欢《肖申克的救赎》的人(小明、小红、小丽、你)也都喜欢《霸王别姬》和《阿甘正传》
  • 这三部电影经常被同一群人高度评价 →它们是相似的
  1. 基于相似物品进行推荐

你喜欢《肖申克的救赎》和《阿甘正传》
《霸王别姬》和这两部电影很相似(都被文艺片爱好者喜欢)

预测:你应该也会喜欢《霸王别姬》→ 推荐!

例子2:淘宝商品推荐

让我们看一个更直观的购物场景。

用户iPhoneAirPodsMacBook小米手机小米耳机
用户A
用户B
用户C
用户D?

用户D买了iPhone和MacBook,但还没买AirPods。

用户视角(User-Based)

  • 用户D和用户A很相似(都买了iPhone和MacBook)
  • 用户A买了AirPods
  • 推荐:你可能也需要AirPods!

物品视角(Item-Based)

  • 买iPhone的人中,60%也买了AirPods
  • 买MacBook的人中,66%也买了AirPods
  • iPhone、MacBook、AirPods经常一起被购买 →它们是相似的(同属苹果生态)
  • 推荐:既然你已经有了iPhone和MacBook,考虑一下AirPods吧!

协同过滤的数学原理

虽然概念简单,但实际计算需要一些数学。

相似度计算

最常用的是余弦相似度

用户A的评分向量:[5, 5, 4, ?, ?] 用户B的评分向量:[5, 4, 5, 2, 2] 余弦相似度 = cos(θ) = (A·B) / (|A| × |B|)

直观理解:两个向量的方向越接近,相似度越高。

评分预测

预测用户u对物品i的评分:

预测评分 = 用户u的平均分 + Σ(相似用户的评分差异 × 相似度) / Σ(相似度)

协同过滤的两种形式对比

维度基于用户(User-Based)基于物品(Item-Based)
核心思想找相似的人找相似的物品
适用场景用户数 < 物品数物品数 < 用户数
计算复杂度用户多时计算量大物品多时计算量大
实时性用户相似度变化快物品相似度相对稳定
可解释性“和你相似的人也喜欢…”“喜欢A的人也喜欢B”
典型应用社交网络、新闻推荐电商、视频、音乐

真实案例

Amazon 的"买了又买"

购买了《Python编程》的用户还购买了: - 《算法导论》 - 《深度学习》 - 《机器学习实战》

这就是典型的基于物品的协同过滤。Amazon 发现这些书经常被同一群人购买,说明它们相似(都是编程/AI相关)。

Netflix 的电影推荐

Netflix 早期采用协同过滤赢得了著名的 Netflix Prize 竞赛。他们发现:

喜欢《老友记》的用户通常也喜欢: - 《生活大爆炸》 - 《摩登家庭》 - 《破产姐妹》

为什么?因为这些剧都是情景喜剧,有相似的受众群体。

网易云音乐的每日推荐

你最近听了很多周杰伦、林俊杰、薛之谦 → 系统发现听这些歌手的用户也经常听毛不易 → 推荐:毛不易的《消愁》

协同过滤的优缺点

优点

  1. 简单直观:逻辑清晰,易于理解和实现
  2. 无需领域知识:不需要了解物品的属性(导演、演员、风格等)
  3. 能发现意外惊喜:可能推荐你从未想过但实际会喜欢的东西
  4. 自动适应:随着用户行为变化自动调整

缺点

  1. 冷启动问题

    • 新用户没有历史行为,无法找到相似用户
    • 新物品没人评价,无法被推荐
    场景:新注册的用户第一次打开APP 问题:没有任何历史数据,推荐什么? 解决:通常先推荐热门内容,或让用户选择兴趣标签
  2. 稀疏性问题

    • 用户数量和物品数量都很大
    • 大部分用户只与极少数物品有交互
    • 评分矩阵非常稀疏(99%的格子是空的)
    淘宝有上亿商品,每个用户平均只买过几百个 → 很难找到足够的"共同评价"来计算相似度
  3. 长尾问题

    • 热门物品得到更多推荐机会
    • 小众但优质的内容难以被发现
  4. 可扩展性问题

    • 用户和物品数量增长时,计算复杂度急剧上升
    • 需要优化算法或分布式计算

协同过滤的进化

1. 矩阵分解(Matrix Factorization)

将稀疏的评分矩阵分解为两个低维矩阵:

评分矩阵 (m×n) = 用户矩阵 (m×k) × 物品矩阵 (k×n) 其中 k << min(m,n),是隐含特征维度

优势

  • 大幅减少计算量
  • 能处理稀疏数据
  • Netflix Prize 的获胜方法

2. 深度学习方法

用神经网络学习用户和物品的embedding:

用户特征 → 神经网络 → 用户向量 物品特征 → 神经网络 → 物品向量 预测评分 = 用户向量 · 物品向量

优势

  • 能融合更多特征(用户年龄、物品类别等)
  • 表达能力更强
  • YouTube、阿里等大厂的主流方案

3. 混合推荐

将协同过滤与其他方法结合:

最终推荐 = 协同过滤 + 内容推荐 + 热门推荐 + 规则约束

实际应用时的工程考虑

1. 离线计算 + 在线查询

离线阶段(每天凌晨): - 计算所有用户相似度 / 物品相似度 - 预生成推荐列表 - 存入缓存(Redis) 在线阶段(用户访问时): - 直接从缓存读取 - 毫秒级响应

2. 增量更新

不用每次都重新计算全量数据 只更新有新行为的用户/物品相关的部分

3. 近似计算

不需要计算所有用户对,只计算Top-K相似用户 使用LSH(局部敏感哈希)等技术加速相似度计算

一个完整的例子:实现简单的协同过滤

假设我们要为一个音乐APP实现推荐:

# 用户-歌曲评分矩阵(简化版)ratings={'小明':{'周杰伦-稻香':5,'林俊杰-江南':4,'薛之谦-演员':3},'小红':{'周杰伦-稻香':5,'林俊杰-江南':5,'五月天-倔强':4},'小刚':{'薛之谦-演员':5,'毛不易-消愁':5,'五月天-倔强':2},'小丽':{'周杰伦-稻香':4,'林俊杰-江南':4,'毛不易-消愁':2},}# 对于一个新用户,他听了:new_user={'周杰伦-稻香':5,'林俊杰-江南':5}# 基于用户的协同过滤推荐流程:1.计算新用户与所有用户的相似度-与小明:相似度0.95(都喜欢周杰伦和林俊杰)-与小红:相似度0.98(口味几乎一致!)-与小刚:相似度0.1(口味差异大)-与小丽:相似度0.9(比较相似)2.找相似用户喜欢但新用户没听过的歌-小红(最相似)喜欢:五月天-倔强(4分)-小明喜欢:薛之谦-演员(3分)3.推荐列表: ✓ 五月天-倔强(优先推荐) ✓ 薛之谦-演员

总结

协同过滤的本质是:

  1. 物以类聚:相似的物品会被相似的人喜欢
  2. 人以群分:相似的人会喜欢相似的东西

它不需要理解内容本身(歌曲的旋律、电影的情节),只需要观察人群的行为模式,就能做出惊人准确的推荐。

虽然协同过滤有冷启动、稀疏性等问题,但它依然是现代推荐系统的基石。从Amazon的商品推荐到Netflix的电影推荐,从淘宝的"猜你喜欢"到网易云音乐的每日推荐,协同过滤的思想无处不在。

在实际应用中,工程师们会将协同过滤与深度学习、知识图谱等技术结合,构建更强大的推荐系统。但万变不离其宗,理解协同过滤的核心思想,是理解现代推荐系统的第一步。


下次当你看到"猜你喜欢"时,不妨想想:这背后是哪些和你相似的人,为你做出了这个推荐呢?

后记

2026年7月18日于上海,在claude opus 4.8辅助下完成。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 3:19:13

嵌入式,串行通信代码逻辑及思路

开时钟 1.首先确定要用usart1去收发数据&#xff0c;那么我们先找到他挂在哪个总线上确定他在apb2上&#xff0c;然后要看usart1的TX&#xff0c;RX在哪个引脚上相连&#xff0c;这些引脚属于哪个GPIO&#xff0c;因为 USART 内部 TX 移位寄存器 → 片内复用选择器 → GPIO 引脚…

作者头像 李华
网站建设 2026/7/19 3:18:39

JavaScript从入门到精通:核心概念与实战技巧

1. JavaScript基础概览&#xff1a;从历史到现代应用JavaScript诞生于1995年&#xff0c;由网景公司的Brendan Eich在短短10天内设计完成。这门语言最初被命名为LiveScript&#xff0c;后来为了蹭当时Java的热度才改名为JavaScript——尽管两者在语法特性上相似&#xff0c;但本…

作者头像 李华
网站建设 2026/7/19 3:17:24

高质量数据集建设为什么不能照搬传统数据治理逻辑

导语一家企业完成了持续多年的数据治理建设。核心业务系统已经接入数据平台&#xff0c;数据标准、元数据、主数据和质量规则陆续建立&#xff0c;主题库和指标体系也开始稳定运行。过去分散在不同部门和系统中的数据&#xff0c;已经可以被统一查询、关联和共享。按照传统数据…

作者头像 李华
网站建设 2026/7/19 3:17:13

fastdds笔记

1WriteParam3个参数&#xff1a;&#xff08;1&#xff09;source_timestamp:写时的时间戳&#xff0c;与时间有关的qos&#xff0c;比如deadline等&#xff0c;会使用这个时间戳&#xff0c;用户可以设置source_timestamp&#xff0c;write的时候通过FASTDDS_EXPORTED_API Ret…

作者头像 李华
网站建设 2026/7/19 3:15:56

嵌入式C语言

C语言数据类型在STM32中数据类型的关键字名字被换为&#xff1a;stdint关键字里对应的名称。使用新名称需要包含stdint.h头文件。C语言宏定义关键字&#xff1a;#define用途&#xff1a;用一个字符串代替一个数字&#xff0c;便于理解&#xff0c;防止出错&#xff1b;提取程序…

作者头像 李华
网站建设 2026/7/19 3:13:44

AI 时代的软件过程管理实践1:AI 到底让开发快了多少

在讲每一个具体领域之前&#xff0c;我想先说一说请 AI 做的一个估算。对于这个估算&#xff0c;我也是后知后觉的。在 AI 兴起的这段时间&#xff0c;我一直有个潜意识——“AI 去掉了开发难度&#xff0c;加速了开发进程&#xff0c;一个人配上 AI&#xff0c;顶得上过去一个…

作者头像 李华