zoukankan      html  css  js  c++  java
  • 百万用户,八十万商品,如何计算基于物品的协同过滤

    问题描述:

    数据包含了一百四十万用户对80万商品的打分。要利用基于物品的协同过滤来计算。如果直接两两计算140万维的向量相似度,肯定不行啊。

    问题分析:

    每个物品的向量虽然是140万维的,但是其实给一个物品打分的用户其实不多,这个矩阵是非常稀疏的。而且根据长尾问题来说,大部分物品只有很少的用户有过评分。

    总结来说就是每个物品评分的用户远远小于140万,每个用户评价过的商品远远小于80万。所以我们的问题就转换为如何处理这个稀疏的矩阵。

    解决方法:

    在计算相似度时,选用了夹角余弦(因为相比于杰卡德,夹角余弦考虑了评分的大小,实测效果更好)

    第一步首先按商品ID进行group by,数据转换为,商品:评价过该商品用户。然后计算商品向量的长度,也就是用户评分的平方之和再开平方。

    第二步,按用户id进行group by,将数据转换为,用户id :该用户评价过得商品。然后计算两个商品的相似度。得到<item_id,item_id>:评分

    第三步,累加商品对的评分,除以两个商品的向量长度得到相似度。

    参考资料:

    https://www.jianshu.com/p/ae1fe36fdb90

  • 相关阅读:
    C#中小写人民币转大写
    Oracle中按规定的字符截取字符串
    Oracle中table数据数据类型
    Oracle中case的第二种用法
    javascript跳转页面
    C#添加二维码带加密带logo
    Oracle
    Oracle中with关键字的使用
    jquery
    插入排序,希尔排序原理,代码及复杂度分析
  • 原文地址:https://www.cnblogs.com/earendil/p/8714819.html
Copyright © 2011-2022 走看看