相似性度量.docx
《相似性度量.docx》由会员分享,可在线阅读,更多相关《相似性度量.docx(14页珍藏版)》请在冰豆网上搜索。
相似性度量
在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就是计算样本间的“距离”(Distance)。
采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否。
对常用的相似性度量作一个总结。
1.欧氏距离2.曼哈顿距离3.切比雪夫距离4.闵可夫斯基距离5.标准化欧氏距离6.马氏距离7.夹角余弦8.汉明距离9.杰卡德距离&杰卡德相似系数10.相关系数&相关距离11.信息熵12.兰氏距离13.斜交空间距离14.最大-最小相似度15.指数相似度16.KL距离
1.欧氏距离(EuclideanDistance)
欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式。
(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:
三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:
(2)两个n维向量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离:
也可以用表示成向量运算的形式:
(4)Matlab计算欧氏距离
Matlab计算距离主要使用pdist函数。
若X是一个M×N的矩阵,则pdist(X)将X矩阵M行的每一行作为一个N维向量,然后计算这M个向量两两间的距离。
例子:
计算向量(0,0)、(1,0)、(0,2)两两间的欧式距离
X=[00;10;02]
D=pdist(X,'euclidean')
结果:
D=
1.00002.00002.2361
2.曼哈顿距离(ManhattanDistance)又称绝对值距离
从名字就可以猜出这种距离的计算方法了。
想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?
显然不是,除非你能穿越大楼。
实际驾驶距离就是这个“曼哈顿距离”。
而这也是曼哈顿距离名称的来源,曼哈顿距离也称为城市街区距离(CityBlockdistance)。
(1)二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离
(2)两个n维向量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的曼哈顿距离
(3)Matlab计算曼哈顿距离
例子:
计算向量(0,0)、(1,0)、(0,2)两两间的曼哈顿距离
X=[00;10;02]
D=pdist(X,'cityblock')
结果:
D=
123
3.切比雪夫距离(ChebyshevDistance)
国际象棋玩过么?
国王走一步能够移动到相邻的8个方格中的任意一个。
那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?
自己走走试试。
你会发现最少步数总是max(|x2-x1|,|y2-y1|)步。
有一种类似的一种距离度量方法叫切比雪夫距离。
(1)二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离
(2)两个n维向量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的切比雪夫距离
这个公式的另一种等价形式是
看不出两个公式是等价的?
提示一下:
试试用放缩法和夹逼法则来证明。
(3)Matlab计算切比雪夫距离
例子:
计算向量(0,0)、(1,0)、(0,2)两两间的切比雪夫距离
X=[00;10;02]
D=pdist(X,'chebychev')
结果:
D=
122
4.闵可夫斯基距离(MinkowskiDistance)
闵氏距离不是一种距离,而是一组距离的定义。
(1)闵氏距离的定义
两个n维变量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:
其中p是一个变参数。
当p=1时,就是曼哈顿距离
当p=2时,就是欧氏距离
当p→∞时,就是切比雪夫距离
根据变参数的不同,闵氏距离可以表示一类的距离。
(2)闵氏距离的缺点
闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。
举个例子:
二维样本(身高,体重),其中身高范围是150~190,体重范围是50~60,有三个样本:
a(180,50),b(190,50),c(180,60)。
那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?
因此用闵氏距离来衡量这些样本间的相似度很有问题。
简单说来,闵氏距离的缺点主要有两个:
(1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。
(2)没有考虑各个分量的分布(期望,方差等)可能是不同的。
(3)Matlab计算闵氏距离
例子:
计算向量(0,0)、(1,0)、(0,2)两两间的闵氏距离(以变参数为2的欧氏距离为例)
X=[00;10;02]
D=pdist(X,'minkowski',2)
结果:
D=
1.00002.00002.2361
5.标准化欧氏距离(StandardizedEuclideandistance)
(1)标准欧氏距离的定义
标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。
标准欧氏距离的思路:
既然数据各维分量的分布不一样,好吧!
那我先将各个分量都“标准化”到均值、方差相等吧。
均值和方差标准化到多少呢?
这里先复习点统计学知识吧,假设样本集X的均值(mean)为m,标准差(standarddeviation)为s,那么X的“标准化变量”表示为:
而且标准化变量的数学期望为0,方差为1。
因此样本集的标准化过程(standardization)用公式描述就是:
标准化后的值=(标准化前的值-分量的均值)/分量的标准差
经过简单的推导就可以得到两个n维向量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的标准化欧氏距离的公式:
如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(WeightedEuclideandistance)。
(2)Matlab计算标准化欧氏距离
例子:
计算向量(0,0)、(1,0)、(0,2)两两间的标准化欧氏距离(假设两个分量的标准差分别为0.5和1)
X=[00;10;02]
D=pdist(X,'seuclidean',[0.5,1])
结果:
D=
2.00002.00002.8284
6.马氏距离(MahalanobisDistance)
(1)马氏距离定义
有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:
而其中向量Xi与Xj之间的马氏距离定义为:
若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:
也就是欧氏距离了。
若协方差矩阵是对角矩阵,公式变成了标准化欧氏距离。
(2)马氏距离的优缺点:
量纲无关,排除变量之间的相关性的干扰。
(3)Matlab计算(12),(13),(22),(31)两两之间的马氏距离
X=[12;13;22;31]
Y=pdist(X,'mahalanobis')
结果:
Y=
2.34522.00002.34521.22472.44951.2247
7.夹角余弦(Cosine)
有没有搞错,又不是学几何,怎么扯到夹角余弦了?
各位看官稍安勿躁。
几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。
(1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:
(2)两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦
类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。
即:
夹角余弦取值范围为[-1,1]。
夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。
当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。
从方向上区分差异,对绝对的数值并不敏感。
(3)Matlab计算夹角余弦
例子:
计算(1,0)、(1,1.732)、(-1,0)两两间的夹角余弦
X=[10;11.732;-10]
D=1-pdist(X,'cosine')%Matlab中的pdist(X,'cosine')得到的是1减夹角余弦的值
结果:
D=
0.5000-1.0000-0.5000
8.汉明距离(Hammingdistance)
(1)汉明距离的定义
两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。
例如字符串“1111”与“1001”之间的汉明距离为2。
应用:
信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。
(2)Matlab计算汉明距离
Matlab中2个向量之间的汉明距离的定义为2个向量不同的分量所占的百分比。
例子:
计算向量(0,0)、(1,0)、(0,2)两两间的汉明距离
X=[00;10;02];
D=PDIST(X,'hamming')
结果:
D=
0.50000.50001.0000
9.杰卡德相似系数(Jaccardsimilaritycoefficient)
(1)杰卡德相似系数
两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。
杰卡德相似系数是衡量两个集合的相似度一种指标。
(2)杰卡德距离
与杰卡德相似系数相反的概念是杰卡德距离(Jaccarddistance)。
杰卡德距离可用如下公式表示:
杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。
(3)杰卡德相似系数与杰卡德距离的应用
可将杰卡德相似系数用在衡量样本的相似度上。
样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。
例如:
A(0111)和B(1011)。
我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。
p:
样本A与B都是1的维度的个数
q:
样本A是1,样本B是0的维度的个数
r:
样本A是0,样本B是1的维度的个数
s:
样本A与B都是0的维度的个数
那么样本A与B的杰卡德相似系数可以表示为:
这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。
而样本A与B的杰卡德距离表示为:
(4)Matlab计算杰卡德距离
Matlab的pdist函数定义的杰卡德距离跟我这里的定义有一些差别,Matlab中将其定义为不同的维度的个数占“非全零维度”的比例。
例子:
计算(1,1,0)、(1,-1,0)、(-1,1,0)两两之间的杰卡德距离
X=[110;1-10;-110]
D=pdist(X,'jaccard')
结果
D=
0.50000.50001.0000
10.相关系数(Correlationcoefficient)与相关距离(Correlationdistance)
(1)相关系数的定义
相关系数是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。
相关系数的绝对值越大,则表明X与Y相关度越高。
当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。
(2)相关距离的定义
(3)Matlab计算(1,2,3,4)与(3,8,7,6)之间的相关系数与相关距离
X=[1234;3876]
C=corrcoef(X')%将返回相关系数矩阵
D=pdist(X,'correlation')
结果:
C=
1.00000.4781
0.47811.0000
D=
0.5219
其中0.4781就是相关系数,0.5219是相关距离。
11.信息熵(InformationEntropy)
信息熵并不属于一种相似性度量。
信息熵是衡量分布的混乱程度或分散程度的一种度量。
分布越分散(或者说分布越平均),信息熵就越大。
分布越有序(或者说分布越集中),信息熵就越小。
计算给定的样本集X的信息熵的公式:
参数的含义:
n:
样本集X的分类数
pi:
X中第i类元素出现的概率
信息熵越大表明样本集S分类越分散,信息熵越小则表明样本集X分类越集中。
。
当S中n个分类出现的概率一样大时(都是1/n),信息熵取最大值log2(n)。
当X只有一个分类时,信息熵取最小值0
12.兰氏距离(LanceandWilliamsdistance,或CanberraDistance)
兰氏距离定义为
与马氏距离一样,兰氏距离对数据的量纲不敏感。
不过兰氏距离假定变量之间相互独立,没有考虑变量之间的相关性。
13.斜交空间距离
在m维空间中,使大量具有相关性的变量的谱系结构不发生变形,采用斜交空间距离,其公式为:
其中,rij为变量i和变量j之间的相关系数。
m为样本数量,n为样本特征数。
14.最大-最小相似度(Max-MinSimilarity)
这里,有三种度量方法:
假定
,则有
15.指数相似度
其中各种相似性度量是第i个值的方差。
余弦相似度、Max-Min相似度以及指数相似度等度量方法的取值范围都在[0,1]内。
16.KL距离(又称为相对熵或者KLDivergence,即Kullback-Leiblerdivergence)
KL距离不符合对称性,即多数情况下
各种相似性度量不成立,KL距离也不符合三角形不等式,即
各种相似性度量也不一定成立。
pdist函数
调用格式:
Y=pdist(X,’metric’)
说明:
用‘metric’指定的方法计算X数据矩阵中对象之间的距离。
X:
一个m×n的矩阵,它是由m个对象组成的数据集,每个对象的大小为n。
'metric’取值如下:
‘euclidean’:
欧氏距离(默认);
‘seuclidean’:
标准化欧氏距离;
‘mahalanobis’:
马氏距离;
‘cityblock’:
布洛克距离;
‘minkowski’:
明可夫斯基距离;
‘cosine’:
余弦距离;
‘correlation’:
相关距离;
‘hamming’:
海明距离;
‘jaccard’:
杰卡德距离;
‘chebychev’:
切比雪夫距离。
详解协方差与协方差矩阵
协方差的定义
对于一般的分布,直接代入E(X)之类的就可以计算出来了,但真给你一个具体数值的分布,要计算协方差矩阵,根据这个公式来计算,还真不容易反应过来。
记住,X、Y是一个列向量,它表示了每种情况下每个样本可能出现的数。
比如给定
则X表示x轴可能出现的数,Y表示y轴可能出现的。
注意这里是关键,给定了4个样本,每个样本都是二维的,所以只可能有X和Y两种维度。
所以
用中文来描述,就是:
协方差(i,j)=(第i列的所有元素-第i列的均值)*(第j列的所有元素-第j列的均值)
这里只有X,Y两列,所以得到的协方差矩阵是2x2的矩阵,下面分别求出每一个元素:
所以,按照定义,给定的4个二维样本的协方差矩阵为:
用matlab计算这个例子
z=[1,2;3,6;4,2;5,2]
cov(z)
ans=
2.9167-0.3333
-0.33334.0000
可以看出,matlab计算协方差过程中还将元素统一缩小了3倍。
所以,协方差的matlab计算公式为:
协方差(i,j)=(第i列所有元素-第i列均值)*(第j列所有元素-第j列均值)/(样本数-1)
下面在给出一个4维3样本的实例,注意4维样本与符号X,Y就没有关系了,X,Y表示两维的,4维就直接套用计算公式,不用X,Y那么具有迷惑性的表达了。
(3)与matlab计算验证
Z=[1234;3412;2314]
cov(Z)
ans=
1.00001.0000-1.0000-1.0000
1.00001.0000-1.0000-1.0000
-1.0000-1.00001.33330.6667
-1.0000-1.00000.66671.3333
可知该计算方法是正确的。
我们还可以看出,协方差矩阵都是方阵,它的维度与样本维度有关(相等)。
理解协方差矩阵的关键就在于牢记它计算的是不同维度之间的协方差,而不是不同样本之间,拿到一个样本矩阵,我们最先要明确的就是一行是一个样本还是一个维度,心中明确这个整个计算过程就会顺流而下,这么一来就不会迷茫了~
欧氏距离vs马氏距离
我们熟悉的欧氏距离虽然很有用,但也有明显的缺点。
它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。
例如,在教育研究中,经常遇到对人的分析和判别,个体的不同属性对于区分个体有着不同的重要性。
因此,有时需要采用不同的距离函数。
如果用dij表示第i个样品和第j个样品之间的距离,那么对一切i,j和k,dij应该满足如下四个条件:
①当且仅当i=j时,dij=0 ②dij>0 ③dij=dji(对称性) ④dij≤dik+dkj(三角不等式)
显然,欧氏距离满足以上四个条件。
满足以上条件的函数有多种,本节将要用到的马氏距离也是其中的一种。
第i个样品与第j个样品的马氏距离dij用下式计算:
dij=(xi一xj)’S-1(xi一xj)
其中,xi和xj分别为第i个和第j个样品的m个指标所组成的向量,S为样本协方差矩阵。
马氏距离是由印度统计学家马哈拉诺比斯(P.C.Mahalanobis)提出的,表示数据的协方差距离。
它是一种有效的计算两个未知样本集的相似度的方法。
与欧式距离不同的是它考虑到各种特性之间的了解(例如:
一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的),并且是尺度无关的(scale-invariant),即独立于测量尺度。
马氏距离不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。
马氏距离还可以排除变量之间的相关性的干扰。
它的缺点是夸大了变化微小的变量的作用。
1)马氏距离的计算是建立在总体样本的基础上的,这一点可以从上述协方差矩阵的解释中可以得出,也就是说,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;
2)在计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离来代替马氏距离,也可以理解为,如果样本数小于样本的维数,这种情况下求其中两个样本的距离,采用欧式距离计算即可。
3)还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如A(3,4),B(5,6);C(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线(如果是大于二维的话,比较复杂?
?
?
)。
这种情况下,也采用欧式距离计算。
4)在实际应用中“总体样本数大于样本的维数”这个条件是很容易满足的,而所有样本点出现
3)中所描述的情况是很少出现的,所以在绝大多数情况下,马氏距离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。