@HUST-SuWB
2015-12-15T02:41:37.000000Z
字数 1822
阅读 480
读书笔记
推荐就是通过对嗜好的一些模式进行预测,借以发现你尚未知晓,却合乎心意的新事物。简单的说,要找到你可能喜欢的物品,你可以观察与你志趣相投的人喜欢些什么。另一方面,通过观察其他人的明显偏好,你可以弄清楚哪些东西和你已然喜欢的物品相似。实际上,它们就是推荐引擎算法中应用最广的两大类:user-based和item-based的推荐程序。以上两种都属于协同过滤的范畴,除此之外,还有content-based的推荐以及基于关联规则的推荐、基于模型的推荐、基于聚类的推荐、混合推荐等等。
大多数推荐引擎会试图给出某些或其他所有物品的估计评分。由此,一种评估推荐程序推荐结果的方法是评估其估计偏好值的质量,即评估所估计的偏好在多大程度上与实际偏好相匹配。但是,没有现成的实际偏好值可用,没有人能确切地知道你将来有多喜欢某些新东西(包括你在内)。所有,一般的处理方式是,通过提取一小段真实数据作为测试数据来仿真。
此外,还有一种评估方式不在乎偏好值,这种方式认为,给出一个从优到劣的推荐列表对于许多场景就够用了,事实上,有时候精确的列表顺序也不那么重要,有几个好的推荐结果就可以了。这时,我们可以用经典的信息检索领域的查准率和查全率来度量。查准率是指在top结果中相关结果的比例,查全率是指所有相关结果包含在top结果中的比例。
基于用户的推荐来自以下直觉:
for(用户u尚未表达偏好的) 每个物品i
for(对i有偏好的) 每个其他用户v
计算u和v之间的相似度s
按权重为s将v对i的偏好并入平均值
return 值最高的物品(按加权平均排序)
外层循环简单地把每个已知物品(用户未对其表达过偏好)作为候选的推荐项。内层循环逐个查看对候选物品做过评价的其他用户,并记下他们对物品的偏好值。最终,将这些值的加权平均作为目标用户对该物品偏好值的预测。
但是,实际中每个物品都检查实在是太慢了,所以通常会先计算出一个最相似用户的领域,然后仅考虑这些用户评价过的物品:
for 每个其他用户w
计算用户u和用户w的相似度s
按相似度排序后,将位置靠前的用户作为领域n
for(n中用户有偏好,而u中用户无偏好的) 每个物品i
for(n中用户对i有偏好的) 每个其他用户v
计算用户u和用户v的相似度s
按权值s将v对i的偏好值并入平均值
以上就是一种标准的基于用户的推荐算法。
item-based的推荐与user-based推荐基本类似,其算法实现为:
for(用户u尚未表达偏好的) 每个物品i
for(用户u表达偏好的) 每个物品j
计算i和j之间的相似度s
按权值为s将u对j的偏好并入平均值
return 值最高的物品(按加权平均排序)
P.S. 物品要比用户稳定,因为一般来说,搜集到的数据越来越多,对物品之间相似度的估计值会趋于收敛。它们没有理由剧烈或频繁地发生变化。但是用户的喜好会随时间而变化。
相似性度量 | Mahout的实现 | 简单介绍 |
---|---|---|
皮尔逊相关系数 | PearsonCorrelationSimilarity | 百度百科在统计学中,皮尔逊积矩相关系数用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。 |
欧式距离 | EuclideanDistanceSimilarity | 百度百科欧氏距离也称欧几里得距离,它是一个通常采用的距离定义,它是在m维空间中两个点之间的真实距离。 |
余弦距离 | CosineMeasureSimilarity | 在多维空间下,以夹角余弦作为相似性的度量。 |
斯皮尔曼相关系数 | SpearmanCorrelationSimilarity | 百度百科斯皮尔曼等级相关主要用于解决称名数据和顺序数据相关的问题。适用于两列变量,而且具有等级变量性质具有线性关系的资料。 |
谷本系数 | TanimotoCoefficientSimilarity | 主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以谷本系数只关心个体间共同具有的特征是否一致这个问题。 |
对数似然比 | LogLikelihoodSimilarity | 另一种不考虑具体偏好值的相似性度量方法。 |