zoukankan      html  css  js  c++  java
  • 推荐算法之相似性推荐

    前文介绍了协同过滤算法和基于内容的推荐算法

    协同过滤算法要求要有很多用户,用户有很多操作

    基于内容的推荐算法用户可以不用很多,但是用户的操作也要有很多

    但是,如果要推荐给新用户(用户的操作不多),应该要怎样推荐呢?这里就要用到相似性推荐了


    相似性推荐定义:对于新用户A,没有ta的历史行为数据,在ta点击了item-X的场景下,可以将与item-X最相似的item集合推荐给新用户A。

    问题转化为,如何用一种通用的方法,表达item之间的相似性。


    仍然以电影推荐为例子,相似性推荐算法执行步骤:

    1.找到用户浏览过的某电影

    2.定义这些电影的具体内容,假设我们以{导演,类型,男主,女主,男配,女配,地区,语言,时长}为维度来定义(这点跟基于内容的推荐算法一样)

    3.对每个维度设立权值,并且对于同个key不同的value直接设置不同的分数(且称为相似度评分吧),例如:

    我们认为,权值分配是{导演1,类型2,男主3,女主4,男配5,女配6,地区7,语言8,时长9}(维度后面跟的是权值)

    假设用户浏览过的电影男主为男主1,而另一部电影,假设男主也是男主1,则男主项得10*3分;假设是男主2,则得8*3分;是男主3,则得5*3分,以此类推

    具体的权值和值与值之间的分数可以自己定

    4.基于步骤3,拿到分数最高的电影,即为要推荐的电影


    具体再看一下

    (1)找用户浏览过的电影,假设为电影A

    (2)定义这些电影的具体内容,假设定为

    {导演1,类型1,男主1,女主1,男配1,女配1,地区1,语言1,时长1}

    (3)对每个维度设立权值,并且对于同个key不同的value直接设置不同的分数

    为简单起见,假设我们所取的维度+权值为{导演1,类型2,男主3,女主4,男配5,女配6,地区7,语言8,时长9},

    假设所有的维度里,满分都为10(即值相同记为10分)

    类型1和类型2相似度评分为8分

    类型1和类型3的相似度评分为2分

    男主1和男主2的相似度评分为9分

    男主1和男主3的相似度评分为8分

    (4)拿到分数最高的电影

    假设我们待推荐的电影只有2部(实际当然不可能),

    电影B:{导演1,类型2,男主3,女主1,男配1,女配1,地区1,语言1,时长1}

    电影C:{导演1,类型3,男主2,女主1,男配1,女配1,地区1,语言1,时长1}

    电影B的推荐评分:1*10+2*8+3*8+4*10+5*10+6*10+7*10+8*10+9*10=440

    电影C的推荐评分:1*10+2*2+3*9+4*10+5*10+6*10+7*10+8*10+9*10=431

    电影B的推荐评分大于电影C的推荐评分,所以给用户推荐电影B


    相似性推荐,原理大致如上,要说明的是:
    (1)由于没有用户历史行为积累,不是个性化推荐,所以所有用户的推荐结果都是相同的
    (2)一般来说,距离公式确实是线性的
    (3)一般来说,每个维度的权重不一样
    (4)这个线性公式,以及维度的权重,都可以通过机器学习训练出来


    参考文章:http://mp.weixin.qq.com/s/KROc9G_kAs8_vquKQKJIFw




  • 相关阅读:
    Retrofit2源码分析
    Android8.0硬件加速的重绘流程
    Android单元测试
    rand5->rand7,rand7->rand10
    快速排序的随机化版本
    快速排序
    亦或实现交换
    在最坏情况下,找到n个元素中第二小的元素需要n+lgn-2次比较
    3*n/2时间内求出最大最小值
    基数排序
  • 原文地址:https://www.cnblogs.com/billmiao/p/9872217.html
Copyright © 2011-2022 走看看