前文介绍了协同过滤算法和基于内容的推荐算法
协同过滤算法要求要有很多用户,用户有很多操作
基于内容的推荐算法用户可以不用很多,但是用户的操作也要有很多
但是,如果要推荐给新用户(用户的操作不多),应该要怎样推荐呢?这里就要用到相似性推荐了
相似性推荐定义:对于新用户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