尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

【老计带你懂AI算法】12:协同过滤与推荐系统,机器怎么猜出你可能喜欢什么

发布时间:2026/9/28 16:20:16

资讯中心
01
ARTICLE

【老计带你懂AI算法】12:协同过滤与推荐系统,机器怎么猜出你可能喜欢什么

【老计带你懂AI算法】12:协同过滤与推荐系统,机器怎么猜出你可能喜欢什么
【老计带你懂AI算法】12协同过滤与推荐系统机器怎么猜出你可能喜欢什么开头你每天都在被推荐打开手机刷到的短视频、看到的商品、听到的歌、读到的新闻背后几乎都有一个推荐系统在默默工作。它在猜你可能喜欢什么然后把这些推到你眼前。推荐系统是今天互联网最赚钱、最核心的AI应用之一。电商靠它提升成交视频平台靠它留住你的时间它对业务的价值巨大可以说哪里有海量内容和商品哪里就离不开推荐。这一篇讲推荐系统里最经典、最基础的思想协同过滤Collaborative Filtering。理解了它你就摸到了整个推荐领域的门。协同过滤的核心思想物以类聚人以群分协同过滤的思想朴素得让人会心一笑就一句话和你口味相似的人喜欢的东西你大概也会喜欢你喜欢的东西和它相似的东西你大概也会喜欢。协同这个词的意思是它不靠分析商品本身的内容不管这是电影还是零食纯粹靠大家的行为数据谁买过什么、谁给什么打了高分互相协作来猜测你的喜好。这就衍生出两种最经典的做法基于用户和基于物品下面分别看。两种经典做法基于用户与基于物品基于用户找和你相似的人基于用户的协同过滤思路是先找到和你口味相似的一群人再把他们喜欢、而你还没接触过的东西推给你。打个比方你有个朋友你俩看过的电影几乎都打一样的分口味高度一致。那么这个朋友最近看了一部你没看过的片子、还大力推荐你多半也会喜欢。系统就是这么干的它先根据打分记录找出和你行为最像的一批用户你的口味邻居看他们喜欢什么你还没看过的就推给你。怎么衡量两个人像不像就看他们对共同接触过的物品打分是不是接近。打分模式越接近就越相似。这其实又回到了前面反复出现的算相似度、找邻居的思路还记得第5篇的KNN吗一脉相承。基于物品找和你喜欢的东西相似的基于物品的协同过滤换个角度不找相似的人而是找相似的物品。它的逻辑是如果很多人都同时喜欢A和B两样东西那A和B就是相似的。你喜欢了A就把B推给你。注意这里的物品相似不是靠商品长得像、内容像而是靠总被同一批人一起喜欢来判定的。打个比方买了尿不湿的人往往也买啤酒那个著名的啤酒尿布故事系统就认为这俩物品相关于是你买尿不湿时给你推啤酒。它不需要理解尿不湿和啤酒有什么内在联系纯粹从大家的共同购买行为里发现了这个关联。基于物品的协同过滤在实际中用得比基于用户的更多。原因很现实物品之间的相似关系相对稳定尿布和啤酒的关系不会天天变可以提前算好存起来推荐时直接查快而用户的口味变化快、用户数量又常常远超物品数量实时找相似用户成本更高。更强的思路矩阵分解挖出藏在背后的偏好上面两种做法有个瓶颈现实中大多数用户只接触过极少数物品你能看过的电影占全部电影的比例微乎其微。这就导致谁对什么打了分这张大表极其稀疏绝大多数格子是空的相似度算起来不准也不稳。于是有了更强的一招矩阵分解这是推荐系统迈向现代的关键一步。它的思想很有洞察力假设每个用户的口味、每个物品的特性其实都可以用一组隐藏的因子来描述。比如描述一部电影背后可能有科幻程度“文艺程度”动作程度这些隐藏维度描述一个用户则是他对这些维度各有多喜欢。一个用户会不会喜欢一部电影取决于他的口味因子和这部电影的特性因子合不合拍。矩阵分解干的就是从那张稀疏的打分表里反推出每个用户和每个物品背后的这组隐藏因子术语叫隐向量。一旦学出了这些因子哪怕你从没看过某部电影系统也能用你的口味因子和这部电影的特性因子算一算预测出你会给它打几分从而决定要不要推给你。这些隐藏因子不是人指定的是模型自己从数据里学出来的它可能对应文艺片偏好也可能是些说不清但确实有用的抽象维度。这个用低维隐向量表示用户和物品的思想极其重要它其实和第8篇PCA的降维、后面大模型的嵌入表示是一脉相承的都是在学习事物的紧凑本质表示。矩阵分解让推荐效果上了一个大台阶著名的Netflix百万美元推荐大赛获奖方案的核心就是它。顺着这条线值得给你讲清推荐系统是怎么一步步演进到今天的这样你就有了完整的脉络。最早是基于内容和基于协同过滤的推荐接着矩阵分解用隐向量把效果推上一个台阶再往后深度学习进来了。深度学习推荐的思路其实是把矩阵分解那个用向量表示用户和物品的想法发扬光大它能把用户的隐向量、物品的隐向量再加上一大堆额外特征用户的年龄地域、物品的类别价格、当前的时间场景等等一股脑喂进神经网络让网络去学习它们之间复杂的非线性关系预测你会不会点、会不会买。像YouTube、抖音、淘宝这些平台背后都是这种深度推荐模型还会分成召回先从海量物品里粗筛出几百个候选和精排再精细打分排序等多个阶段。但你会发现无论怎么演进最核心的那个思想没变把用户和物品变成向量、算它们合不合拍这正是协同过滤和矩阵分解打下的地基。理解了这个地基那些花哨的深度推荐模型你就不会觉得深不可测。输入和输出长什么样输入用户对物品的行为数据最典型的是一张用户-物品-评分的表谁给哪个物品打了几分也可以是隐式行为谁点击/购买/观看了什么。输出给每个用户预测出他对没接触过的物品的偏好分数按分数排序取最高的几个作为推荐列表。上代码两种做法都跑一遍基于物品相似度代码找最像的物品先看基于物品的协同过滤用余弦相似度找出和某物品最像的物品。输入用户物品评分表。输出物品之间的相似度、给某物品找最相似的物品。# 依赖pip install numpyimportnumpyasnp# 用户对物品的评分矩阵(行用户,列物品,0表示没评过)# 5个用户,4个物品Rnp.array([[5,4,0,1],[4,5,1,0],[1,0,5,4],[0,1,4,5],[5,4,1,0],],dtypefloat)# 基于物品:算物品之间的余弦相似度(按列,每列是一个物品的评分向量)defcosine(a,b):returnnp.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b)1e-8)n_itemsR.shape[1]simnp.zeros((n_items,n_items))foriinrange(n_items):forjinrange(n_items):sim[i,j]cosine(R[:,i],R[:,j])print(物品相似度矩阵(对角线是自己和自己1):)print(np.round(sim,2))# 给物品0找最相似的物品(排除自己)target0sim[target,target]-1# 排除自己most_similarnp.argmax(sim[target])print(f\n和物品{target}最相似的是物品{most_similar})print(因为它们总被同一批用户一起打高分,这就是基于物品的协同过滤)运行输出示例物品相似度矩阵(对角线是自己和自己1): [[1. 0.91 0.24 0.15] [0.91 1. 0.19 0.13] [0.24 0.19 1. 0.92] [0.15 0.13 0.92 1. ]] 和物品0最相似的是物品1 因为它们总被同一批用户一起打高分,这就是基于物品的协同过滤可以看到物品0和物品1相似度高达0.91总被同一批人一起喜欢而和物品2、3相似度很低。给喜欢物品0的用户推荐物品1就是基于物品的协同过滤在做的事。矩阵分解代码SVD补全评分表再看更强的矩阵分解用surprise库的SVD。输入评分数据。输出预测评分、补全稀疏表。# 依赖pip install scikit-surprise pandasimportpandasaspdfromsurpriseimportDataset,Reader,SVDfromsurprise.model_selectionimporttrain_test_splitfromsurpriseimportaccuracy# 造一份评分数据:用户对电影打分(1到5分)data{user:[1,1,1,2,2,3,3,3,4,4,5,5],item:[101,102,103,101,104,102,103,105,101,105,102,104],rating:[5,3,4,5,2,4,5,1,4,2,5,3],}dfpd.DataFrame(data)readerReader(rating_scale(1,5))datasetDataset.load_from_df(df[[user,item,rating]],reader)trainset,testsettrain_test_split(dataset,test_size0.25,random_state0)# SVD就是经典的矩阵分解算法modelSVD(n_factors10,random_state0)# n_factors:隐藏因子的个数model.fit(trainset)# 训练:从评分里反推用户和物品的隐向量predsmodel.test(testset)print(测试集RMSE:,round(accuracy.rmse(preds,verboseFalse),3))# 预测用户1对没看过的电影104会打几分predmodel.predict(uid1,iid104)print(f预测 用户1 对 电影104 的评分:{pred.est:.2f})运行输出示例数据量很小仅作演示数值参考测试集RMSE: 1.483 预测 用户1 对 电影104 的评分: 3.42运行你会得到预测评分。核心是SVD这个矩阵分解算法它从稀疏的评分里学出了每个用户和电影的隐向量进而能预测任意用户对任意电影的评分哪怕这个组合在训练数据里从没出现过。这就是矩阵分解补全稀疏矩阵、做推荐的威力。一个绕不开的现实难题冷启动推荐系统有个非常经典、也很棘手的难题叫冷启动值得专门一提。协同过滤全靠历史行为数据。可是一个刚注册的新用户系统对他一无所知没有任何行为怎么给他推荐一个刚上架的新商品没有任何人买过、评过又怎么被推荐出去这就是冷启动问题新用户冷启动和新物品冷启动。现实中的应对办法通常是组合拳给新用户先推最热门的、或者让他注册时选几个兴趣标签给新物品先靠它的内容属性类别、标签、描述去匹配可能感兴趣的人这叫基于内容的推荐和协同过滤互补。所以真实的推荐系统从来不是单靠协同过滤而是协同过滤、基于内容、热门推荐等多种策略的融合还会用上后面讲的深度学习来处理更复杂的特征。理解了协同过滤这个基石你才能理解现代推荐系统是在它之上叠了多少东西。优缺点与适用场景协同过滤优点思想简单直观、不需要理解物品内容纯靠行为、能发现意想不到的关联啤酒尿布、矩阵分解效果好。缺点有冷启动问题、数据稀疏时效果打折、纯行为数据用不上物品的丰富内容特征。适合场景有大量用户行为数据的个性化推荐电商、视频、音乐、新闻。不适合全新的、没有行为积累的场景要靠基于内容的方法补冷启动。现代推荐系统基本都是多策略融合协同过滤是其中最重要的基石之一。这里还得点一个容易被忽视、但极其重要的问题推荐好不好到底怎么衡量。你可能以为看预测评分准不准比如上面代码里的RMSE就行但实际远没这么简单。推荐系统真正关心的是用户到底点没点、买没买、看没看所以业界更看重命中率、点击率、覆盖率、多样性这些指标最终还要靠线上的A/B测试拿真实用户分两组对比看哪套推荐带来的点击和成交更高。而且推荐还面临一些微妙的陷阱比如信息茧房老推你喜欢的越推越窄你再也看不到新东西、热门垄断热门的越推越热长尾好物永无出头之日。所以做推荐光让模型预测得准还不够怎么平衡准确度和多样性、怎么兼顾商业目标和用户体验是比模型本身更难、也更考验价值观的工程和产品问题。这也是为什么推荐系统是一个技术和业务结合极深的领域。小结与承上启下协同过滤物以类聚人以群分靠大家的行为数据协作猜偏好不看物品内容。两种做法基于用户找相似的人、基于物品找相似的物品实际用得更多。矩阵分解从稀疏评分反推用户和物品的隐藏因子隐向量效果上大台阶和降维、嵌入一脉相承。现实难题冷启动靠多策略融合来解评价看线上点击成交还要警惕信息茧房和热门垄断。到这里传统机器学习和几个经典应用领域时序、推荐就都讲完了。从下一篇开始我们正式进入深度学习的世界。而深度学习的一切都要从最基本的单元讲起。下一篇我们讲神经网络和它的学习引擎反向传播看清深度学习到底是怎么学习的。我们下一篇见。延伸阅读Surprise 库官方文档本篇矩阵分解代码用的库https://surprise.readthedocs.io推荐系统经典综述可按关键词Matrix Factorization Techniques for Recommender SystemsKoren等2009检索原文说明以上为官方与经典公开资料链接可能随版本调整如打不开可用标题搜索。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。