Top-N Recommendation——基于电影(Item)的推荐

注:
1. 数据集来源MovieLens
2. 源代码在末尾附上

一、Introduction

无论是在实体商店还是在网络上,都会有Top-N推荐的情况。基于客户或者基于商品做出推荐。本实验基于Movielens的电影数据集,对电影做出Top-N 推荐。主要目的是基于Item-Based的思想来进行Top-10的相关电影推荐。

二、Methodology

本实验基于Item-Based 的思路,计算电影的相似度,对每部电影都生成一个它与其他电影的相似度的序列(按顺序排列),然后从中得到Top-10的电影来作为该部电影的相关推荐电影集。在MovieLens中的数据格式如下:

  1::Toy Story (1995)::Animation|Children's|Comedy

1:表示电影ID; Toy Story(1995)表示电影名 ;Animation|Children’s|Comedy :表示标签
因此可以用一个向量表来表示该电影的信息:
Top-N Recommendation——基于电影(Item)的推荐_第1张图片
附注: 0 表示电影没有该标签 , 1 表示电影有该标签

  对每一部电影,计算它与其他电影的相似度,生成一个相似度的有序序列。N部电影生成N个有序序列,因此对每一部电影都有一个单独的推荐列表。

三、Trading Algorithm

  • Item-Based:
    首先生成一个电影的信息矩阵(N*M),然后对于每一个部电影,使用相似度计算的公式,将该电影与其余N-1部电影做相似计算,然后再对相似度进行排序,推荐前Top-10的电影。

  • 相似度:
    公式:

    本实验采用的是Cosine相似度:
    这里写图片描述

    • 原理:多维空间两点与所设定的点形成夹角的余弦值。
    • 范围:【-1,1】,值越大,说明夹角越小,两点相距越近,相似度就越高。
    • 说明:Cosine相似度被广泛应用于计算文档的数据的相似度,本实验是基于标签的电影推荐,因此采用了该公式来计算两个电影之间标签集的相似度,以此来代表两部电影的相似度。
  • TF-IDF算法(计算某个标签对于该电影的权重)
    由于MovieLens里面的Movie数据只给出了电影的标签(如下),但是并没有给出该标签用户的点击量,因此无法对该标签在本电影中的权重进行计算。因此,本实验没有用TF-IDF计算词频,确定标签权重的步骤。

四、Result

为了验证结果,将电影的信息和相似度打印出来。
在这里我们随机选取了三部电影,将其电影的Top-10推荐以及它的相似度打印出来,以便分析比较。
Movie1:

Top-N Recommendation——基于电影(Item)的推荐_第2张图片

Movie2:

Top-N Recommendation——基于电影(Item)的推荐_第3张图片

Movie3:

五、Conclusion

结果证明,对于每一部电影,都输出了一个推荐序列,而且按照相似度排列的Top-N推荐。列如, 电影1:它的标签是 Action|Adventrue|Romance ,在它的Top-10推荐列表中,按照相似度从大到小推荐。

  • 本实验存在一个问题:
    有些电影其推荐列表的电影相似度全部都是1,,如电影2 GoldenEye ,其标签为:Action|Adventure|Thiriller ,推荐列表中的电影标签与其完全相同,这是不太符合实际的。
  • 原因
    主要问题在于MovieLens数据集中并没有对每一个标签的点击量进行说明,无法通过TF-IDF算法计算标签在电影中的权重,但是实际情况下,每一部电影的标签都会有一个点击量,作为该标签与该电影相关程度的反映。因此对于一部电影,它的某一个标签的权重无法衡量,因此不能区分出某一个标签在一部电影当中的权重,在计算的时候每一个标签的权重都相同,导致了拥有相同标签的电影其相似100%。
  • 解决方案
    每一部电影的标签都会有一个点击量,通过IF-IDF算法计算其权重,作为该标签与该电影相关程度的反映。用以区分出某一个标签在一部电影当中的权重,在计算的时候每一个标签的权重各有不同,那么便不会出现上述的问题。

总体来说,本实验基于item-based思想,通过相似度计算,生成电影的top-N 推荐序列。虽然数据上存在一些问题,但是总体上还是完成了推荐的目的。

点击此处下载源代码

你可能感兴趣的:(C++,算法,Top-N,基于Item推荐)