V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
leben
V2EX  ›  问与答

关于Slope one算法的实际应用

  •  
  •   leben · 2011-05-25 13:44:05 +08:00 · 4787 次点击
    这是一个创建于 4963 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设有N个用户和M张照片,用户可以标记喜欢或者不喜欢某一张照片,使用slope one算法应该怎么计算某个用户可能喜欢那些照片。

    slope one算法的原理基本看明白了,但是还是没想明白应该怎么样将这个应用到实际项目中去,求达人指点一二,谢谢谢谢。
    3 条回复    1970-01-01 08:00:00 +08:00
    ray58750034
        1
    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
        2
    leben  
    OP
       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
        3
    ray58750034  
       2011-05-25 15:10:41 +08:00
    这里的样本1 可以理解为user1, 只是因为你的系统没有打分这个环节,所以用另一种方式采样,使得它有打分而已。

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

    还有你的第二点,我觉得不需要把所有喜欢过的照片做基准, 算法搞复杂了可能准确性反而只有低。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1875 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:24 · PVG 00:24 · LAX 08:24 · JFK 11:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.