PHP-如何快速计算出用户的相似度
当用户量有两千万时,如何快速准确的计算出用户的相似度,推荐给用户,如从用户的爱好,上线时间,这些纬度来考虑,搜索到有余弦算法,但是没太看懂,请大神们赐教,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
当用户量有两千万时,如何快速准确的计算出用户的相似度,推荐给用户,如从用户的爱好,上线时间,这些纬度来考虑,搜索到有余弦算法,但是没太看懂,请大神们赐教,
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
相似度有几种,有计算距离的(比如欧式距离)、有计算余弦的。
欧式距离一般比较简单,余弦其实就是两个向量夹角的度量,公式一般的书上都有。
首相就是每一个用户有不同的属性,可以选一些权重比较的属性,(比如地域的相似,就可以选所在地作为一个属性);
然后,每一个用户作为一个向量;
最后计算向量间的距离或夹角(即相似度)
最后想起来,还有关联规则的挖掘(一般的书上都有,这里不详细讲了)
如何快速计算用户相似度似乎并没有太好的办法,大部分的算法都是围绕在怎么使得用户相似度表达的更为准确。
用户的相似度计算是依据你的数据,需求来计算的。举个例子,比如一个音乐网站,需要计算出具有相同听歌爱好的用户,那么就可以根据用户对乐曲的评分相似度来计算:
假设有3首歌a,b,c
A用户对这3首歌的评分是 3,4,3
B用户对其评分是 2,3,4
那么简单的计算A,B用户用户的相似度就是
((3-2)(3-2) + (4-3)(4-3) + (3-4)*(3-4) )/3
这就是最基本的相似度计算方法,值越小说明用户越相似。
当前具体实现起来是一件比较复杂的事情
首先,我假设你是想给用户推荐相似用户,因为如果给用户推荐文章或其他内容,思路是不同的。
一、先创建向量模型,根据不同的网站类型,需要考虑的因素不同,以下几种方式可以做合起来使用
1、考虑用户的哪些数据可以作为向量中的一个纬度,如所在学校、出生日期、性别、发不过的文章数等。
2、把用户id、电影(或其他数据)id、评分作为向量中的纬度。
二、对于第一步中的1和2两种(也有可能多种)向量,分别计算相似度,按照不同的权重获得最终的相似度评分。
三、如何使用向量进行评分呢,有多种方法
1、使用问题中所说的余弦定理,具体公式网络上可以获得,步骤就是根据当前用户的向量信息,遍历所有其他用户,分别获得相似度。
2、第1种方法也是可以用,但是缺点是不能频繁更新,可能需要几天更新一次。更好的方式是把余弦定理(或其他定理如欧几里得距离等)按照一定的聚类算法去使用,具体的聚类算法可以参考K-Means等,网上有不少线程的代码,可以参考,基本原理就是在整个向量集中随即的选取几个中心点,把周围相似的聚集到一起。
四、如果想简单实现的话
可以先使用大的分类方法,把用户分成各种小的类别,比如按照学校、年级、性别等(不使用相似度计算,直接.分类),在获得的小集合中使用余弦定理,参数就是用户评分数据等等,这种情况可以在线计算,速度还是比较快的。
《数学之美》有一张讲余弦定理的
可以看看,和你的问题本质是一样的,只要根据余弦定理算出向量偏移就可以了
个人理解的基本原理:
假设用户u 爱好为u K ,用户v 的爱好为v K ,那么两者的爱好相交集合为Ku ∩Kv 。该集合越大,表明两位用户的行为越相似就认为是越相似,然后通过不同属性 交集的集合来确定推荐给用户的被推荐用户
根据特征向量计算特征值,图像配准算法里面就这么用。
可以借用数学建模的方法,2000万个用户可以转化成2000万个多维点,计算两个用户的相似度,可以求两个点的距离,距离越近越相似。