「」协同过滤算法:在抖音狂给1000个小姐姐点赞的事被老婆发现了( 三 )


三、用户协同过滤计算
用户协同过滤(UserCF)的计算方式跟物品协同过滤(ItemCF)的计算方式类似 。 不同的是由计算两两物品的相似度 , 转换成计算两两用户的相似度 。
如下图所示:
「」协同过滤算法:在抖音狂给1000个小姐姐点赞的事被老婆发现了
本文插图
评分了相同图书的用户为相似用户 , 他们的相似度同样也用cosine相似度公式来计算 。 计算完相似度后 , 就可以根据用户间的相似性 , 预测用户对未评分图书进行评分预测 。
但是在亚马逊上 , 由于用户评分的稀疏性(很多用户压根不评分) , 没有评分的用户无法跟其他用户计算相似性 , 从而导致很多用户之间没有相似度 。 所以2001年的时候 , 亚马逊选择物品协同过滤算法来做推荐 , 并发表了论文 。 这个论文也导致大家一度认为物品协同过滤优于用户协同过滤 。
其实只有最合适的算法 , 没有最优的算法 。
时间到了移动互联网的今天 , 我们更多是用点击数据 , 用户好友关系 , 通讯录或者甚至是同一个WIFI地址来计算用户协同过滤 , 数据稀疏性得到一定程度上的解决 。 现在 , 用户的协同过滤在信息流内容推荐 , 社交性的推荐系统有着很好的利用 。 比如抖音 , 因为内容更新频繁 , 用户协同过滤可以作为很好的召回手段 , 所以也就会出现老公点赞的视频会被推荐给他老婆的情景 。
同样地 , 这里介绍的cosine相似度的算法 , 也不是工业界现在最佳实践的用户相似度计算方式了 。 用户相似度的计算 , 现在的最佳实践也同样也是用Embedding的方式实现 。
而且 , 用户相似度的计算 , 最有效的方式不一定是通过本节中介绍的计算方式 , 带社交功能的APP可以通过用户的好友关系 , 一般的APP可以通过获取用户的通讯录实现用户协同过滤 。 这些方式都来的更加简单和直接 。
四、模型协同过滤-矩阵分解(SVD)
对于很多没有计算机专业背景的人来说 , 直接理解SVD算法是很困难的 。 需要有高等数学 , 线性代数 , 还要理解机器学习模型中的目标函数 , 损失函数 , 梯度 , 正则化 , 最小二乘法等概念 。 很多文章介绍SVD都很技术 , 这里不准备采用技术大咖们的方式 。 我还是继续用图文的方式介绍 , 这也许是世界上最简单的理解SVD的方式 。
首先介绍一下背景 。
SVD算法的诞生 , 跟美国Netflix公司有关 。 这家公司中文名叫网飞 , 拍了大家熟悉的网剧《纸牌屋》 。

「」协同过滤算法:在抖音狂给1000个小姐姐点赞的事被老婆发现了
本文插图
时间来到2006年 , Netflix发起一个推荐系统的悬赏竞赛 。 他们公开了自己网站的用户数据评分数据包 , 并放出100万美元悬赏优化推荐算法 。 凡是能在Netflix现有的推荐系统基础上 , 把均方根误差降低10%的人 , 都能参与瓜分这100万美元 。 消息一放出 , 引来了无数高手参加 。 这场比赛中 , 最佳算法就是SVD 。
背景介绍完了 , 接下来直接介绍SVD是怎么计算的 。
还是跟前面那样 , 简单化问题:假设一个平台只有4个用户和4本图书 。
(1)数据
用户对物品评分1-5分 , 且有以下评分记录 。
「」协同过滤算法:在抖音狂给1000个小姐姐点赞的事被老婆发现了
本文插图
(2)学习算法
根据线性代数我们知道 , 一个矩阵可以分解为多个矩阵的乘积 。 SVD英文全称叫做Singular Value Decomposition , 这个算法是个矩阵分解的通用名称 , 在不同领域有不同的形式 。 在推荐系统领域 , 可以简单的认为 , SVD就是将一个矩阵 , 在一定的精度损失下 , 将一个矩阵分解成两个矩阵 。
运用这个算法 , 我们可以将上图的矩阵做以下的近似分解:


推荐阅读