博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于用户的推荐协同过滤算法的算法
阅读量:5108 次
发布时间:2019-06-13

本文共 1382 字,大约阅读时间需要 4 分钟。

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

本文介绍了基于用户的协同过滤算法。简单的说,给用户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)分。这样来看事实上两者对评价这部电影是一流的似的,在影片的计算建议您需要得分的时候,只需要计算平均邻里值加用户的角度(共同海损值计数)

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

转载于:https://www.cnblogs.com/mfrbuaa/p/4606859.html

你可能感兴趣的文章
WebAssembly是什么?
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
在iOS 8中使用UIAlertController
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
Atcoder Grand Contest 004 题解
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
idea 系列破解
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
c# Resolve SQlite Concurrency Exception Problem (Using Read-Write Lock)
查看>>
dependency injection
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
C#综合揭秘——细说多线程(下)
查看>>
c#运算符 ?
查看>>
Silverlight学习笔记(九)-----RenderTransform特效【五种基本变换】及【矩阵变换MatrixTransform】...
查看>>
【题解】青蛙的约会
查看>>
求给定字符串的最长子字符串
查看>>