Mahout in Action 学习---基于物品的分布式推荐算法(Wikipedia数据集)

来源:互联网 发布:爱宕号重巡洋舰数据 编辑:程序博客网 时间:2024/05/22 10:35

文字总结自《Mahout in Action》中文版第六章的内容

1.1 数据集介绍

Wikipedia数据集:一篇文章到另外一篇文章的链接。
可以将文章看作是用户,将该文章指向的文章视为该源文章所喜欢的物品
类型:单向布尔型偏好。
相似性评估算法:LogLikelihoodSimilarity
关于LogLikelihoodSimilarity具体算法思想见:
对数似然比相似度 - xidianycy - 博客频道 - CSDN.NET http://blog.csdn.net/u014374284/article/details/49823557

1.2 设计一个基于物品的分布式推荐算法

1.2.1 构建共现矩阵
回顾在计算物品之间相似度的方法,要计算出每个物品对之间的相似性,并将其结果倒入一个巨大的矩阵。矩阵应该是一个方阵,其行和列的数目等于数据模型中的物品数。表达一个物品和其他物品之间的相似性。该矩阵式沿对角线对称的,因为物品X和Y之间的相似性与物品Y和X之间的相似性是一样的。(注意,此举矩阵式物品-物品矩阵,在本例中,即为文章指向的文章 和文章指向的文章的共现矩阵)
共现矩阵(co-occurrence matrix):不是计算每个物品对之间的相似性,而是计算在某些用户偏好值列表中每个物品对共同出现的次数。例如:如果有9个用户都对物品X和Y表达了偏好,那么X和Y共同出现了9次。两个在任何用户偏好中均为同时出现的物品,其共现次数为0。注意,每当用户给出对某个物品的偏好,就代表物品与自身共生了一次,不过这个计数并没有什么用处。
共现关系可以看成是一种相似性:两个物品同时出现的次数越多,它们越有可能相关或者相似。共现矩阵的作用类似于物品的ItemSimilarity。
表1给出了一个小的偏好值样本集生成的共现矩阵,
表1
可以看出,该矩阵是对角线对称的。因为有7个物品,所以矩阵式7*7的方阵。对角线上的数值对于算法没有意义。
1.2.2 计算用户向量
将一个用户的偏好视为一个向量。在一个有n个物品的数据模型中,用户偏好就像一个N维向量,每个维度代表一个物品,用户对于物品的偏好值就是这个向量中的值。若用户没有表达过偏好,则为0。这是一个典型的稀疏矩阵,大多数为0,因为用户通常仅对一小部分物品表达过偏好。例如,在这个小型样本数据集中,用户3的偏好对应向量[2.0,0.0,0.0,4.0,4.5,0.0,5.0]。意思为用户3对于101-107的偏好值分别为2.0,0.0,0.0,4.0,4.5,0.0,5.0。要生成推荐结果,每个用户都需要这样一个向量。
1.2.3 生成推荐结果
将每个用户的向量和共现矩阵相乘,即可得到最终推荐结果。这里还是仅仅以用户U3为例。
这里写图片描述
可以从结果向量R中直接得到推荐结果:在R中最大值对应于最佳的推荐。
仍然以用户3为例,忽略物品101,104,105和107的值,因为用户已经表达过偏好,就不需要再推荐。剩下的,物品103最高,所以是最佳推荐。其次是102和106。
1.2.4 结果分析
直观而言,如果物品103和那些用户3表达过偏好的物品存在共现关系,说明物品103和用户3喜欢的物品很相似,最终的结果包含了大的偏好值和大的共现值之间的乘积,这就是R中较大的值会对应较好推荐的原因。
注意,R中的值并不代表一个估计偏好值,在理想情况下,应该利用一些额外的信息将它们归一化为估计偏好值。

0 0
原创粉丝点击