PHP-如何快速计算出用户的相似度

小组聊天灌水 小组聊天灌水 主题:993 回复:2175

PHP-如何快速计算出用户的相似度

灵芸 发布于 2016-10-29 字数 160 浏览 1160 回复 7

当用户量有两千万时,如何快速准确的计算出用户的相似度,推荐给用户,如从用户的爱好,上线时间,这些纬度来考虑,搜索到有余弦算法,但是没太看懂,请大神们赐教,

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(7

晚风撩人 2017-10-13 7 楼

相似度有几种,有计算距离的(比如欧式距离)、有计算余弦的。
欧式距离一般比较简单,余弦其实就是两个向量夹角的度量,公式一般的书上都有。

首相就是每一个用户有不同的属性,可以选一些权重比较的属性,(比如地域的相似,就可以选所在地作为一个属性);
然后,每一个用户作为一个向量;
最后计算向量间的距离或夹角(即相似度)

最后想起来,还有关联规则的挖掘(一般的书上都有,这里不详细讲了)

甜柠檬 2017-07-05 6 楼

如何快速计算用户相似度似乎并没有太好的办法,大部分的算法都是围绕在怎么使得用户相似度表达的更为准确。

用户的相似度计算是依据你的数据,需求来计算的。举个例子,比如一个音乐网站,需要计算出具有相同听歌爱好的用户,那么就可以根据用户对乐曲的评分相似度来计算:
假设有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
这就是最基本的相似度计算方法,值越小说明用户越相似。

当前具体实现起来是一件比较复杂的事情

浮生未歇 2017-06-24 5 楼

首先,我假设你是想给用户推荐相似用户,因为如果给用户推荐文章或其他内容,思路是不同的。

一、先创建向量模型,根据不同的网站类型,需要考虑的因素不同,以下几种方式可以做合起来使用

1、考虑用户的哪些数据可以作为向量中的一个纬度,如所在学校、出生日期、性别、发不过的文章数等。
2、把用户id、电影(或其他数据)id、评分作为向量中的纬度。

二、对于第一步中的1和2两种(也有可能多种)向量,分别计算相似度,按照不同的权重获得最终的相似度评分。

三、如何使用向量进行评分呢,有多种方法
1、使用问题中所说的余弦定理,具体公式网络上可以获得,步骤就是根据当前用户的向量信息,遍历所有其他用户,分别获得相似度。

2、第1种方法也是可以用,但是缺点是不能频繁更新,可能需要几天更新一次。更好的方式是把余弦定理(或其他定理如欧几里得距离等)按照一定的聚类算法去使用,具体的聚类算法可以参考K-Means等,网上有不少线程的代码,可以参考,基本原理就是在整个向量集中随即的选取几个中心点,把周围相似的聚集到一起。

四、如果想简单实现的话
可以先使用大的分类方法,把用户分成各种小的类别,比如按照学校、年级、性别等(不使用相似度计算,直接.分类),在获得的小集合中使用余弦定理,参数就是用户评分数据等等,这种情况可以在线计算,速度还是比较快的。

偏爱自由 2017-05-27 4 楼

《数学之美》有一张讲余弦定理的

可以看看,和你的问题本质是一样的,只要根据余弦定理算出向量偏移就可以了

夜无邪 2017-04-15 3 楼

个人理解的基本原理:
假设用户u 爱好为u K ,用户v 的爱好为v K ,那么两者的爱好相交集合为Ku ∩Kv 。该集合越大,表明两位用户的行为越相似就认为是越相似,然后通过不同属性 交集的集合来确定推荐给用户的被推荐用户

浮生未歇 2016-12-02 2 楼

根据特征向量计算特征值,图像配准算法里面就这么用。

灵芸 2016-11-08 1 楼

可以借用数学建模的方法,2000万个用户可以转化成2000万个多维点,计算两个用户的相似度,可以求两个点的距离,距离越近越相似。