机器学习两种距离——欧式距离和马氏距离

咱们熟悉的欧氏距离虽然颇有用,但也有明显的缺点。它将样品的不一样属性(即各指标或各变量)之间的差异等同看待,这一点有时不能知足实际要求。例如,在教育研究中,常常遇到对人的分析和判别,个体的不一样属性对于区分个体有着不一样的重要性。所以,有时须要采用不一样的距离函数。
    若是用dij表示第i个样品和第j个样品之间的距离,那么对一切i,j和k,dij应该知足以下四个条件:
①当且仅当i=j时,dij=0
②dij>0
③dij=dji(对称性)
④dij≤dik+dkj(三角不等式)
    显然,欧氏距离知足以上四个条件。知足以上条件的函数有多种,本节将要用到的马氏距离也是其中的一种。
    第i个样品与第j个样品的马氏距离dij用下式计算:
dij =(x i 一x j)'S-1(x i一xj)
     其中,x i 和x j分别为第i个和第j个样品的m个指标所组成的向量,S为样本协方差矩阵。
马氏距离有不少优势。它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还能够排除变量之间的相关性的干扰。它的缺点是夸大了变化微小的变量的做用。html

------------------------------------------------------------------------ide

欧氏距离定义:欧氏距离( Euclidean distance)是一个一般采用的距离定义,它是在m维空间中两个点之间的真实距离。
在二维和三维空间中的欧式距离的就是两点之间的距离,二维的公式是
d = sqrt((x1-x2)^+(y1-y2)^)
三维的公式是
d=sqrt(x1-x2)^+(y1-y2)^+(z1-z2)^)
推广到n维空间,欧式距离的公式是
d=sqrt( ∑(xi1-xi2)^ ) 这里i=1,2..n
xi1表示第一个点的第i维坐标,xi2表示第二个点的第i维坐标
n维欧氏空间是一个点集,它的每一个点能够表示为(x(1),x(2),...x(n)),其中x(i)(i=1,2...n)是实数,称为x的第i个坐标,两个点x和y=(y(1),y(2)...y(n))之间的距离d(x,y)定义为上面的公式.
欧氏距离看做信号的类似程度。距离越近就越类似,就越容易相互干扰,误码率就越高。
--------------------------------------------------------------------------------函数

马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的类似度的方法。与欧式距离不一样的是它考虑到各类特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,由于二者是有关联的),而且是尺度无关的(scale-invariant),即独立于测量尺度。idea

下面是关于马氏距离的计算方法(参考:http://topic.csdn.net/u/20080911/14/f4402565-3b4f-4de4-a4fa-f4c020dd1477.html ).net

两个样本:
His1 = {3,4,5,6}
His2 = {2,2,8,4}code

它们的均值为:
U = {2.5, 3, 6.5, 5}
协方差矩阵为:
S =
| 0.25 0.50 -0.75 0.50 |
| 0.50 1.00 -1.50 1.00 |
|-0.75 -1.50 2.25 -1.50 |
| 0.50 1.00 -1.50 1.00 |
其中S(i,j)={[His1(i)-u(i)]*[His1(j)-u(j)]+[His2(i)-u(i)]*[His2(j)-u(j)]}/2orm

下一步就是求出逆矩阵S^(-1)
马氏距离 D=sqrt{[His1-His2] * S^(-1) * [(His1-His2)的转置列向量]}htm

欧氏距离(http://en.wikipedia.org/wiki/Euclidean_distance )即两项间的差是每一个变量值差的平方和再平方根,目的是计算其间的总体距离即不类似性。blog

马氏距离(Mahalanobis distances)
1)马氏距离的计算是创建在整体样本的基础上的,这一点能够从上述协方差矩阵的解释中能够得出,也就是说,若是拿一样的两个样本,放入两个不一样的整体中,最后计算得出的两个样本间的马氏距离一般是不相同的,除非这两个整体的协方差矩阵碰巧相同;
2)在计算马氏距离过程当中,要求整体样本数大于样本的维数,不然获得的整体样本协方差矩阵逆矩阵不存在,这种状况下,用欧式距离来代替马氏距离,也能够理解为,若是样本数小于样本的维数,这种状况下求其中两个样本的距离,采用欧式距离计算便可。
3)还有一种状况,知足了条件整体样本数大于样本的维数,可是协方差矩阵的逆矩阵仍然不存在,好比A(3,4),B(5,6);C(7,8),这种状况是由于这三个样本在其所处的二维空间平面内共线(若是是大于二维的话,比较复杂???)。这种状况下,也采用欧式距离计算。
4)在实际应用中“整体样本数大于样本的维数”这个条件是很容易知足的,而全部样本点出现3)中所描述的状况是不多出现的,因此在绝大多数状况下,马氏距离是能够顺利计算的,可是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差别之处。
咱们熟悉的欧氏距离虽然颇有用,但也有明显的缺点。它将样品的不一样属性(即各指标或各变量)之间的差异等同看待,这一点有时不能知足实际要求。马氏距离有不少优势。它不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还能够排除变量之间的相关性的干扰。它的缺点是夸大了变化微小的变量的做用。ip

 

马氏距离的计算:

%欧氏距离和马氏距离的计算
x=[1 2;1 3;2 2;3 1];
[mx,nx]=size(x);
Dis=ones(mx,nx);%产生全1的矩阵
C=cov(x);%计算协方差
for i=1:mx
    for j=1:nx
        D(i,j)=((x(i,:)-x(j,:))*inv(C)*(x(i,:)-x(j,:))')^0.5;
    end
end
D

Y=pdist(x,'mahal')
y=squareform(Y)
 

结果: