关于Slope one算法的实际应用

2011-05-25 13:44:05 +08:00
 leben
假设有N个用户和M张照片,用户可以标记喜欢或者不喜欢某一张照片,使用slope one算法应该怎么计算某个用户可能喜欢那些照片。

slope one算法的原理基本看明白了,但是还是没想明白应该怎么样将这个应用到实际项目中去,求达人指点一二,谢谢谢谢。
4753 次点击
所在节点    问与答
3 条回复
ray58750034
2011-05-25 14:17:30 +08:00
我想到的一个方案是, 比如 A B两张照片, X喜欢照片A, 如何计算X喜欢照片B的可能性:
计算所有喜欢照片A的人中喜欢照片B的数量的比例, 作为打分样本1;
计算所有喜欢照片B的人中喜欢照片A的数量的比例, 作为打分样本2;

(样本1 + 样本2) /2 就是X喜欢照片B的可能性。
leben
2011-05-25 14:47:44 +08:00
这个办法倒是蛮简单的,呵呵。不过我想实现的是一个照片推荐系统,一对一的原理都比较简单,但是涉及到具体怎么做,我有点摸不到头绪。从来没有接触过这方面。
简单看了一下,slope one是基于rate的,就是说user必须给item一个rate,这个rate是一个范围,然后slope one会计算当前用户对某一个item可能给出的rate。但是如果仅仅是0和1的时候就不适合了,因为0.5你是算0还是1。

据说amazon的item-to-item是根据余弦相关度做的,这方面google有一篇文章说明。我的理解是把某一个item的用户是否喜欢作为维度,将item视为一个向量,然后计算任意两个item的余眩,余眩越小相似度越高。

这两种算法问题不大,我的问题是,怎么样在系统中应用。
1、每次查看一张图片的时候是否要计算当前图片和其他所有图片的相似度,然后排序列出相似度最高的那些。
2、如果我想看当前用户可能喜欢的照片,那么基准就是当前用户所有习惯过得照片,那这个获取的相似照片应该怎么排列。
3、实际上这些算法都非常耗费时间,肯定不能实时生成,实际使用应该使用的是数据挖掘吧,那么它的计算频率、计算时间、选取的样本。还有应该不会在web或者db服务器计算,我看豆瓣是单独用机器做数据挖掘的。

希望有熟悉这个方面的达人多多指点。
ray58750034
2011-05-25 15:10:41 +08:00
这里的样本1 可以理解为user1, 只是因为你的系统没有打分这个环节,所以用另一种方式采样,使得它有打分而已。

具体做法,就是把一对一的模型应用到大数据里去, 然后尽量都事先算好,多做缓存。

还有你的第二点,我觉得不需要把所有喜欢过的照片做基准, 算法搞复杂了可能准确性反而只有低。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/13492

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX