zoukankan      html  css  js  c++  java
  • 基于用户的推荐协同过滤算法的算法

    协同过滤推荐算法是最重要的算法,它是基于协同过滤算法的物品分为基于用户的协作过滤算法。


    本文介绍了基于用户的协同过滤算法。简单的说,给用户u推荐。所以只要找出谁和u课前行为似用户。这与u較像的用户。把他们的行为推荐给用户u就可以。

    所以基于用户的系统过滤算法包含两个步骤:1)找到和目标用户兴趣相似的用户集合  2)找到这个集合中的用户喜欢的。且目标用户没有听说过的物品推荐给目标用户。


    第一步的关键点在于计算用户之间的相似度。相似度一般通过Jaccard公式或者余弦相似度即可求得,及计算共同拥有行为所占的比重(详细式子google即可。csdn插入公式不方便。。

    。),所以眼下而言,计算用户相似度的复杂度是O(N*N), N为用户数量。在用户数比較大的站点中不有用。比方亚马逊用户数量肯定N>100000。那么这种复杂度是不可接受的。 

    第一步时间复杂度的改进方法:由于非常多用户间事实上相似度是为0的,假设看成是一个N*N的矩阵的话。肯定是个稀疏矩阵,那么我们事实上没有必要浪费计算量在这些0上。我们能够建立物品到用户的倒查表,及能够依据物品找到全部对该物品有过行为的用户,然后遍历各物品,对一个物品然后找到对该物品有过行为的用户,然后计算这些用户间的行为相似度(共同拥有行为+1。同一时候计算这些用户的行为数)。最后计算两用户间的公有行为占各自行为的比重。

    第一步计算相似度的改进方法:举个样例:假设两人都买过《新华辞典》,并不能说明这两人想像,由于这本书基本上人人都会买,而假设这两人都买过《机器学习》,那么我们能够肯定,这两人在这方面有相同的兴趣爱好。也就是说,越是对冷门物品有相同的行为,就越说明用户的相似性,即在计算用户相似性的时候,须要减少热门物品的影响(通过计算流行度来实现。然后用1/N(i)来计算公共行为比重,N(i)表示流行度,这样。流行度高的物品所占比重就比較低)


    第二步则比較简单,选出K个和用户u最相似的用户。把他们喜欢过的物品而且用户u没有喜欢过的物品推荐给u就可以。这里面K的选择很重要。K越大。推荐的结果就越热门,流行度就越高,同一时候覆盖率越低,由于基本推荐的都是流行的物品.


    第二步评分预測改进方法:一般来说并非全部第二步中的物品都会推荐给用户,由于这种物品还是许多的,一般来说我们会选择topN, 选用户可能最感兴趣的N个商品。那么要选择前N个商品,肯定是依据评分来进行排序,这样便会遇到一个问题。不同人的评分基点不同。比方A评分基点在4,好看的电影评5分,不好看的评3分。可是B基点是2。好看的评3分,不好看的评1分,这种话直接依据评分来计算是不精确的,改进方法是计算用户在基点上的评分,如A对好看的电影给了(5-4)分,对不好看的电影给了(3-4)分,B对好看的电影给了(3-2)分,对不好看的电影给了(1-2)分。这样来看事实上两者对评价这部电影是一流的似的,在影片的计算建议您需要得分的时候,只需要计算平均邻里值加用户的角度(共同海损值计数)


    基于用户的协同过滤算法在实际不到,部分原因是因为更多的用户,该算法的复杂度还是非常高的,在此建议另一个方面是很难给出推荐理由,人们普遍的行业选择基于项目的协同过滤算法。

  • 相关阅读:
    Aurora 数据库支持多达五个跨区域只读副本
    Amazon RDS 的 Oracle 只读副本
    Amazon EC2 密钥对
    DynamoDB 读取请求单位和写入请求单位
    使用 EBS 优化的实例或 10 Gb 网络实例
    启动 LAMP 堆栈 Web 应用程序
    AWS 中的错误重试和指数退避 Error Retries and Exponential Backoff in AWS
    使用 Amazon S3 阻止公有访问
    路由表 Router Table
    使用MySQLAdmin工具查看QPS
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4606859.html
Copyright © 2011-2022 走看看