zoukankan      html  css  js  c++  java
  • 基于邻域的算法

    基于用户的协同过滤算法###


    基于用户是什么意思呢?比如说你和你的朋友各自都要去吃饭,然而你比较宅,没怎么出去吃过,你觉得你朋友经验比较丰富,于是问他去哪儿比较好,于是你朋友介绍了西直门的边境小吃,你一听:诶,我没去过,可以去试试。那在这个例子里,首先你询问了你朋友,你为什么询问你朋友,因为你们兴趣相似(都去吃饭)并且你信任他,然后他介绍了一个他喜欢而你没听说过的饭店。因此可以看出基于用户的协同过滤算法需要看两件事情:

    • 找到和目标用户兴趣相似的用户集合
    • 找到这个集合中用户喜欢的,而目标用户没有听说过的物品

    1. 计算用户的兴趣相似度
      给定用户u和v,令N(u)表示u有过正反馈的物品集合,N(v)表示v有过正反馈的集合,通过余弦相似度计算:

      缺点:很多用户没有对同样的物品产生过行为,算法的很多时间将浪费在计算这些用户的相似度上。
      解决方案:倒排表(将用户-物品表转化为物品-用户倒排表)

      (ABCD表示用户,abcde表示物品)
      将出现在同一用户物品列表里的不同物品的共现次数标为1:

    2.得到用户之间兴趣相似度后,给他推荐和他兴趣最相似的K个用户喜欢的物品

    S(u,K)包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,w和r分别表示用户之间的兴趣相似度和用户对物品的兴趣。

    用户相似度计算的改进####

    还是拿饭店的例子,如果两个人都去吃了边境小吃,并不能说明他俩都爱泰国菜,可能只是因为店面太火,慕名而来,很有可能只是尝试一下,因此对于这种情况,我们不能说这两个用户的吃饭兴趣相似,也就是说,我们需要降低热门商品对相似度计算带来的影响:

    该公式惩罚了用户共同兴趣列表中热门物品对他们相似度的影响


    基于物品的协同过滤算法###

    同样,如果你想去吃饭,问你的朋友去哪儿吃比较好,然后你告诉他你前几天去了枫蓝的日昌觉得还不错。于是你朋友说:我知道去四道口的路上有一家潮汕小馆也是吃广东菜的,你可以去试试。你一听,也是广东菜,是你喜欢的,你可能就去了。在这个例子里,我们看到朋友在知道了你的历史行为以后,给你推荐了和日昌类似的饭馆,这就是基于物品的协同过滤。同样也需要关注两件事情:

    • 计算物品之间的相似度
    • 根据物品的相似度和用户的历史行为给用户生成推荐列表

    1.我们可以用下面的公式定义物品的相似度:

    N表示喜欢物品x的用户个数
    然而如果物品j和热门,该公式会造成任何物品都和热门物品有很大的相似度,因此需要对热门物品进行惩罚:

    2.在得到物品之间的相似度后,可以通过如下公式计算用户u对物品j的兴趣:

    N(u)是用户喜欢的物品集合,S(j,K)是和物品j最相似的K个物品的集合,w和r分别表示物品之间相似度和用户对物品的兴趣。

    对活跃用户进行惩罚####

    试想一下,如果有一个人吃过北京所有的饭店,那么分析他的用户数据之后,北京所有饭店两两之间都产生相似度,这显然是不合理的,因此这个用户对饭店相似度的贡献应该远远低于一个只吃过十几个饭店的用户对饭店相似度的贡献,于是我们增加IUF参数来修正物品相似度的公式:

    该公式对活跃用户进行了惩罚。

    物品相似度的归一化####


    假设有湘菜和川菜,湘菜之间的相似度是0.6,川菜之间的相似度是0.5,湘菜和川菜的相似度是0.2,若一个用户喜欢5个湘菜5个川菜,那ItemCF推荐的将是湘菜,因为湘菜之间的相似度高。若进行归一化,湘菜之间的相似度变为1,川菜之间的相似度也变为1,那么他的推荐列表湘菜和川菜的数量应该大致是相等的。因此,相似度的归一化可以提高推荐的多样性。


    UserCF和ItemCF的综合比较

    总的来说,UserCF需要维护一个用户相似度矩阵,ItemCF需要维护一个物品相似度矩阵


    评测标准###

    1.准确率:
    推荐列表中被用户评过分的物品数量 / 用户有过评分行为的物品数量
    2.召回率:
    被用户评过分又被推荐的物品数量 / 推荐列表物品数量
    3.覆盖率:
    推荐列表物品数量 / 物品总数量

  • 相关阅读:
    EasyNVR RTSP转RTMP-HLS流媒体服务器前端构建之_关于接口调用常见的一些问题(401 Unauthorized)
    EasyNVR H5直播流媒体解决方案前端构建之:如何播放自动适配RTMP/HLS直播播放
    EasyNVR RTSP摄像机转HLS直播服务器中使用Onvif协议控制预置位
    EasyNVR RTSP摄像机HLS直播服务器中使用Onvif协议获取设备快照
    EasyNVR无插件直播服务器如何使用ffmpeg实现摄像机快照功能的
    EasyNVR流媒体服务器接入EasyDSS云视频平台快照上传实现
    EasyDSS RTMP流媒体服务器的HTTP接口query url的C++实现方法
    EasyDSS高性能流媒体服务器前端重构(五)- webpack + vue-router 开发单页面前端实现按需加载
    EasyDSS高性能流媒体服务器前端重构(六)- webpack-dev-server 支持手机端访问
    EasyNVR RTSP转HLS(m3u8+ts)流媒体服务器前端构建之:bootstrap-datepicker日历插件的实时动态展现
  • 原文地址:https://www.cnblogs.com/LeonNew/p/5306046.html
Copyright © 2011-2022 走看看