MySQL实现协同过滤推荐为用户推荐喜爱的商品 1 协同过滤推荐算法1.1 什么是协同过滤 协同过滤推荐(Collaborative Filtering Recommendation): 分析用户兴趣,在用户群中找到指定用户的相似用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。 简单来说就是,物以类聚,人以群分。基于不同的偏好对用户进行群体划分,并对用户推荐品味相似的商品。 1.2 协同过滤推荐算法可以分为三类:基于用户的协同过滤基于商品的协同过滤基于模型的协同过滤
1.2.1 基于用户的协同过滤推荐
假设要从用户A没有购买的商品中,选一个商品推荐给用户A,可以分为以下两步:找到与用户A相似的用户群体:上图用户A与用户C都购买了商品1和商品2,所以用户C与用户A的相似度更高,可以划分为同一个用户群体;把群体中用户C购买的商品4推荐给用户A。 基于商品的协同过滤与基于用户的协同过滤内在逻辑基本一致,就不重复描述了。 1.2.2 相似度计算方法
本文主要以 Jaccard 相似度及余弦相似度来计算 Jaccard 相似度公式
图表数据 1 代表产生购买行为,0代表没产生购买行为
用户 Jaccard 相似度计算结果如下
对于用户A的商品喜好程度进行如下计算: 用户A对商品3的喜好程度 = 用户A与B的相似度 * 用户B对商品3的喜好程度 + 用户A与C的相似度 * C对商品3的喜好程度 = 0 * 1 + 0.67 * 0 = 0 用户A对商品4的喜好程度 = 用户A与B的相似度 * 用户B对商品4的喜好程度 + 用户A与C的相似度 * C对商品4的喜好程度 = 0 * 1 + 0.67 * 1 = 0.67 根据用户A对商品3以及商品4的喜好程度高低,最终推荐商品4给用户A。 其他用户的商品喜好程度计算方法类似,就不赘述了。 余弦相似度公式
图表数字代表用户对商品的喜好程度,数值越高表示喜好程度越高。
用户余弦相似度计算结果如下
用户A对商品3的喜好程度 = A与B的相似度 * B对商品3的喜好程度 + A与C的相似度 * C对商品3的喜好程度 = 0 * 0.45 + 0.307 * 0 = 0 用户A对商品4的喜好程度 = A与B的相似度 * B对商品4的喜好程度 + A与C的相似度 * C对商品4的喜好程度 = 0 * 3 + 0.307 * 4 = 1.228 根据用户A对商品3以及商品4的喜好程度高低,最终推荐商品4给用户A。 其他用户的商品喜好程度计算方法类似。 Jaccard 与 余弦相似度计算的区别: Jaccard 的计算公式是交集与并集,表现为事件的发生或者没有发生,更符合二分的情况,在偏好程度方面有一定欠缺; 而余弦公式能够很好的反映出用户的偏好程度,所以本文之后都采用余弦相似度进行计算。 2 MySQL 代码实现 2.1 基于用户的协同过滤【测试数据】 为了便于理解协同过滤推荐算法的代码逻辑,在代码实现阶段,先以上述的用户与商品数据作为测试样例,测试代码结果与上述人工计算的结果是否一致,如果结果一致,再将代码平移运用到实际数据当中。 建立测试数据表 导入数据
2.2 用户相似度代码实现 2.2.1 实现同一商品用户间的对应关系,余弦相似度 Ai*Ai, Ai*Bi, Bi*Bi
2.2.2 实现商品评价的合计 sum(Ai*Ai)、sum(Ai*Bi)、sum(Bi*Bi)
2.2.3 用户相关矩阵,实现sum(Ai*Bi) / sqrt(sum(Ai*Ai)sum(Bi*Bi))
构建用户相关矩阵视图,方便后续调用
2.3 计算用户对每个商品的喜好程度
上文人工计算的用户A对商品4的喜好程度为1.228,代码计算的为1.229,考虑到计算过程当中因为小数位数的影响,差异可忽略不计。 所以,测试代码可运用于真实数据中。 2.4 为用户推荐一个商品
最终,商品推荐结果如下: 用户A,推荐商品4 用户B,推荐商品2 用户C,推荐商品3 至此,在测试数据上利用MySQL实现协同过滤算法已完成。 计划在下一篇文章,写如何利用协同过滤算法实现如何为用户推荐感兴趣的视频。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/42880.html