Mahout聚类中相似度计算

7.3 Hello World:运行一个简单的聚类实例(这个内容,我在前面博文“mahout中的kmeans简单实例”中已介绍过)

7.4 Exploring distance measures(距离度量扩展)

在上面的简单聚类示例中,我们用的是EuclideanDistanceMeasure(欧式距离)来计算点之间的距离。虽然它在我们上节的聚类实例中被证明是有效的度量方法,但在Mahout包中还有其他相似的度量方法实现。这些类被命名为 DistanceMeasure(距离度量) 的实现,计算两个向量之间定义的距离。距离短意味着两向量相似性高,反之距离短意味着相似度低,相似性和距离是相关的概念。

7.4.1 欧几里德距离度量
欧氏距离,是所有距离度量方法中最简单的。这是最直观,最符合我们的“距离”的正常的理念。例如,给定的两点在一个平面上,欧几里德距离度量可以用一把尺子来衡量它们之间的距离计算。在数学上,两个n维向量的欧几里德距离公式如下:

Mahout中用EuclideanDistanceMeasure这个类来实现这个距离

7.4.2 平方的欧几里德距离度量
顾名思义,这个距离测量的值就是欧几里德距离度量的返回值的平方。其n维向量的计算距离公式如下:

Mahout中用SquaredEuclideanDistanceMeasure这个类来实现这个距离

7.4.3 曼哈顿距离度量
不同于欧几里得距离,曼哈顿距离度量下,任意两点之间的距离是其坐标的绝对差异的总和。图7.6比较在XY平面上的两个点之间的欧氏距离和曼哈顿距离。这个距离测量的名字来源于曼哈顿的街道网格布局。任何一个新的纽约客知道,你不能从第二大道的第二街直通建筑物步行到第六大道的第六街。真正的步行距离会比4*4块多,在数学上,两个n维向量的曼哈顿距离公式如下:

Mahout聚类中相似度计算_第1张图片

Mahout中用ManhattanDistanceMeasure这个类来实现这个距离

7.4.4 余弦距离度量
余弦距离要求我们把点当作向量来看,在这些向量之间有一个夹角,如图7.7所示

当这个角度很小的时候,矢量在某种程度上指向同一方向,因此在一定意义上这些点是“关闭”的。余弦距离计算这个角度的余弦,其中余弦值接近1表示角度很小,余弦值减小表示角度会越来越大。为了给一个适当的距离,这是0,它减去1的余弦值时关闭和更大另有。

两个n维向量的余弦距离公式如下:

请注意,这跟两个向量的长度并没有关系,所有点的起始都在同一方向。还要注意的是余弦距离测量范围从0.0(沿同一方向的两个向量)至2.0(沿相反方向的两个向量)。Mahout中CosineDistanceMeasure这个类来实现这个距离

7.4.5 Tanimoto距离度量
余弦距离不考虑向量的长度,这对某些数据集可能很合适,但对长度上含有价值信息的向量聚类就不合适。例如,考虑三个向量(1.0,1.0),B(3.0,3.0)和C(3.5,3.5)。尽管他们在指向同一个方向,任何两个向量的余弦??距离都是0.0。余弦距离捕获不到B和C在一定意义上更接近的信息。欧几里德距离度量将反映这一点,但它又没有考虑向量之间的角度,事实上它们是在同一方向上的。有时候我们想要的是两个信息都能被反映出来的距离。
Tanimoto距离又称Jaccard的距离测量,能捕捉角度和点之间的相对距离有关的信息。两个n维向量的余弦距离公式如下:

7.4.6 加权距离度量
Mahout还提供了WeightedDistanceMeasure类,用欧几里德距离和曼哈顿距离实现。加权距离度量是Mahout的高级特征,它能让你在不同维上赋予不同的权重,以此对距离度量信息产生影响,WeightedDistanceMeasure在向量格式化中需要序列化为文件。

例如,当在XY平面上计算点之间的距离时,假设我们希望x坐标的值是两倍值,则所有的x值需要增加一倍。为了做一个加权距离测量,我们将构建一个在x方向为2.0而y方向为1.0的权重向量。这两维对距离的影响是不同的,距离值一般会因x值的变化而更敏感。

 

CSDN好像没找到公式编辑,关于具体的公式,可以到mahout in action这本书中的7.4节去查看

参考资料:

1.Mahout in action
2.http://blog.sina.com.cn/s/blog_5caa94a00100ya8t.html
3.http://www.chinaz.com/web/2011/1008/212684.shtml

你可能感兴趣的:(c,扩展,action,distance)