Mahout推荐引擎中的几种相似度计算简要介绍
2016-03-17 10:59
465 查看
Mahout的Taste框架里提供的几种比较常用的相似度计算。
1.欧几里德距离(Euclidean Distance),记为d(x,y)
首先要计算两个点之间的欧几里德距离,然后根据欧几里德距离计算相似度。
对应的欧几里德相似度,一般采用如下方式转换:sim(x,y) = 1/(1+d(x,y))。距离越小,相似度越大。
2.余弦相似性(Cosine Similarity)
余弦相似性计算时,余弦值代表用户之间的相似性,当夹角越小时,余弦值越大,用户越相似,余弦相似性被广泛应用于计算文档数据的相似度。
3.皮尔逊相关系数(Pearson Correlation Coefficient)
皮尔逊相关系数一般用户计算两个定距变量间线性相关的紧密程度,它的取值在【-1,+1】之间。当取值大于0时表示两个变量是正相关的,即一个变量的值越大,
另一个变量的值也会越大;当取值小于0时表示两个变量是负相关的,即一个变量的值越大,另一个变量的值反而会越小。
4.Tanimoto系数(Tanimoto Coefficient)
Tanimoto系数也称Jaccard系数,是Cosine相似度的扩展,一般用于计算文本数据的相似度。
5.CityBlock(曼哈顿)相似度
曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇,是使用在几何度量空间的几何学用语,用以表明两个点以上在标准坐标系上的绝对轴距总和。
转换后的相似度为:sim(x,y) = 1/(1+d(x,y))。
上述各种相似性计算方法都各自的优缺点,也应用于不同的场景之下。
这里只简单介绍下概念,数学公式没有往上贴。
除了以上介绍的几种,PEARSON, EUCLIDEAN, COSINE, TANIMOTO, SPEARMAN, CITYBLOCK, Mahout的Taste框架中还给出了LOGLIKELIHOOD, 可用来计算用户也可用来计算item。下面是对用户进行聚类使用的,FARTHEST_NEIGHBOR_CLUSTER, NEAREST_NEIGHBOR_CLUSTER
1.欧几里德距离(Euclidean Distance),记为d(x,y)
首先要计算两个点之间的欧几里德距离,然后根据欧几里德距离计算相似度。
对应的欧几里德相似度,一般采用如下方式转换:sim(x,y) = 1/(1+d(x,y))。距离越小,相似度越大。
2.余弦相似性(Cosine Similarity)
余弦相似性计算时,余弦值代表用户之间的相似性,当夹角越小时,余弦值越大,用户越相似,余弦相似性被广泛应用于计算文档数据的相似度。
3.皮尔逊相关系数(Pearson Correlation Coefficient)
皮尔逊相关系数一般用户计算两个定距变量间线性相关的紧密程度,它的取值在【-1,+1】之间。当取值大于0时表示两个变量是正相关的,即一个变量的值越大,
另一个变量的值也会越大;当取值小于0时表示两个变量是负相关的,即一个变量的值越大,另一个变量的值反而会越小。
4.Tanimoto系数(Tanimoto Coefficient)
Tanimoto系数也称Jaccard系数,是Cosine相似度的扩展,一般用于计算文本数据的相似度。
5.CityBlock(曼哈顿)相似度
曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇,是使用在几何度量空间的几何学用语,用以表明两个点以上在标准坐标系上的绝对轴距总和。
转换后的相似度为:sim(x,y) = 1/(1+d(x,y))。
上述各种相似性计算方法都各自的优缺点,也应用于不同的场景之下。
这里只简单介绍下概念,数学公式没有往上贴。
除了以上介绍的几种,PEARSON, EUCLIDEAN, COSINE, TANIMOTO, SPEARMAN, CITYBLOCK, Mahout的Taste框架中还给出了LOGLIKELIHOOD, 可用来计算用户也可用来计算item。下面是对用户进行聚类使用的,FARTHEST_NEIGHBOR_CLUSTER, NEAREST_NEIGHBOR_CLUSTER
相关文章推荐
- mahout0.11 taste框架推荐引擎api
- 基于Mahout的电影推荐系统
- Mahout基本原理
- mahout之推荐系统源码笔记(1) ---预处理之PreparePreferenceMatrixJob
- Mybatis 分页插件 3.3.0 发布
- Java8中的简易并发
- 【转载】Overlapped I/O模型分析
- Scrapy - 爬虫框架
- 毕业后的第一件事一定是买一台高配mac
- JAVA_WEB学习经验总结
- Boost::Asio::Error的用法浅析
- C++实验2-两数差的绝对值
- JAVA学习 之 异常处理
- PHPStorm IDE 快捷键(MAC)
- js ==与===区别(两个等号与三个等号)(转载)
- 购物车多店铺列表数组处理
- python子进程模块subprocess详解与应用实例 之一
- Java顶尖程序员都看过的11本书
- 五猴分桃
- 关于Object.clone克隆方法的测试