文章插图
的相似度 。
通过上面这些步骤, 公式1中的分子和分母基本都很容易计算出来了, 我们通过下图的代码(下面的broadcast即是

文章插图
), 就可以计算出每组

文章插图
对的相似度, 最终得到的RDD为:

文章插图
, 其中Sim为sid1和sid2的相似度 。

文章插图
图6:计算每组

文章插图
的相似度
有了上面的准备, 下面我们来说明一下怎么计算每个标的物的topK最相似的标的物 。
具体的计算过程可以用如下的Spark Transformation来实现 。 其中第三步的TopK需要我们自己实现一个函数, 求

文章插图
这样的列表中评分最大的TopK个元素, 实现也是非常容易的, 这里不赘述 。

文章插图
如果我们把每个标的物最相似的K个标的物及相似度看成一个列向量的话, 那么我们计算出的标的物相似度其实可以看作如下矩阵, 该矩阵每列K个非零元素 。

文章插图
图7:标的物相似度矩阵
到此为止, 我们通过Spark提供的一些Transformation操作及一些工程实现上的技巧计算出了每个标的物topK最相似的标的物 。 该计算方法可以横向拓展, 所以再大的用户数和标的物数都可以轻松应对, 最多可能需要多加一些服务器 。
2.为用户生成推荐
有了1中计算出的标的物topK最相似的标的物, 下面我们来说明一下怎么为用户生成个性化推荐 。 生成个性化推荐有两种工程实现策略, 一种是看成矩阵的乘积, 另外一种是根据第二节2中”基于标的物的协同过滤“中的公式来计算, 这两种方法本质上是一样的, 只是工程实现上不一样 。 下面我们分别讲解这两种实现方案 。
(1) 通过矩阵相乘为用户生成推荐上面图2中的矩阵是用户行为矩阵, 第i行第j列的元素代表了用户i对标的物j的偏好/评分, 我们将该矩阵记为

文章插图
, 其中n是用户数, m是标的物数 。 图7中的矩阵是标的物之间的相似度矩阵, 我们将它记为

文章插图
, 这是一个方阵 。

文章插图
和

文章插图
其实都是稀疏矩阵, 我们通过计算这两个矩阵的乘积(Spark上是可以直接计算两个稀疏矩阵的乘积的), 最终的结果矩阵就可以方便用来为用户推荐了:

文章插图
。 其中的第i行

文章插图
代表的是用户i对每个标的物的偏好得分, 我们从这个列表中过滤掉用户操作过的标的物, 然后按照得分从高到低降序排列取topN就是最终给用户的推荐 。
(2) 通计算公式为用户生成推荐标的物相似度矩阵

文章插图
是稀疏矩阵, 最多

文章插图
个非零元素(因为每个标的物只保留K个最相似的标的物), 一般K取几十或者上百规模的数值, m如果是十万或者百万量级, 存储空间在1G左右(例如, 如果m=100万, K=100, 相似度为双精度浮点数, 那么

文章插图
非零元素占用的空间为100万*100*8Byte=763M), 完全可以通过广播的形式将

文章插图
broadcast到每个Spark计算节点中 。 我们先将相似矩阵转化为下图的Map结构, 再广播出去, 方便利用公式计算相似度 。
推荐阅读
- 分享一下我在工作中常用的一些工具 运营工具有哪些?
- 重点管控地区及关注地图分享 什么是重点管控地区
- 充满阳光正能量激励人心的句子分享 充满阳光正能量的句子
- 分享企业做品牌网络营销的3大好处 企业做品牌网络营销的好处有哪些?
- 分享企业品牌的5大作用 企业品牌的作用有哪些?
- 分享做企业营销策划的8个技巧 企业营销策划该怎么做?
- 分享制定企业营销策划方案的2大法则 企业营销策划方案如何制定?
- 分享企业招商营销策划的4大策略 企业招商营销策划的策略有哪些?
- 原神手游单手剑攻略-单手剑优缺点及玩法分享你知道吗
- 分享左岸咖啡的文案 简短咖啡文案有哪些?