欧氏距离是最容易直观理解的距离度量方法,咱们小学、初中和高中接触到的两个点在空间中的距离通常都是指欧氏距离。算法
Matlab计算距离使用pdist函数。若X是一个m×n的矩阵,则pdist(X)将X矩阵每一行做为一个n维行向量,而后计算这m个向量两两间的距离。机器学习
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'euclidean') d= 1.4142 2.8284 4.2426 1.4142 2.8284 1.4142
顾名思义,在曼哈顿街区要从一个十字路口开车到另外一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block distance)。ide
Matlab计算曼哈顿距离:函数
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'cityblock') d= 2 4 6 2 4 2
国际象棋中,国王能够直行、横行、斜行,因此国王走一步能够移动到相邻8个方格中的任意一个。国王从格子(x1,y1)走到格子(x2,y2)最少须要多少步?这个距离就叫切比雪夫距离。学习
Matlab计算切比雪夫距离:编码
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'chebychev') d= 1 2 3 1 2 1
闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的归纳性的表述。idea
其中p是一个变参数:spa
当p=1时,就是曼哈顿距离;code
当p=2时,就是欧氏距离;orm
当p→∞时,就是切比雪夫距离。
所以,根据变参数的不一样,闵氏距离能够表示某一类/种的距离。
(2)未考虑各个份量的分布(指望,方差等)多是不一样的。
Matlab计算闵氏距离(以p=2的欧氏距离为例):
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'minkowski',2) d= 1.4142 2.8284 4.2426 1.4142 2.8284 1.4142
定义: 标准化欧氏距离是针对欧氏距离的缺点而做的一种改进。标准欧氏距离的思路:既然数据各维份量的分布不同,那先将各个份量都“标准化”到均值、方差相等。假设样本集X的均值(mean)为m,标准差(standard deviation)为s,X的“标准化变量”表示为:
若是将方差的倒数当作一个权重,也可称之为加权欧氏距离(Weighted Euclidean distance)。
Matlab计算标准化欧氏距离(假设两个份量的标准差分别为0.5和1):
X=[1 1;2 2;3 3;4 4]; d=pdist(X,'seuclidean',[0.5,1]) d= 2.2361 4.4721 6.7082 2.2361 4.4721 2.2361
马氏距离的引出:
上图有两个正态分布的整体,它们的均值分别为a和b,但方差不同,则图中的A点离哪一个整体更近?或者说A有更大的几率属于谁?显然,A离左边的更近,A属于左边整体的几率更大,尽管A与a的欧式距离远一些。这就是马氏距离的直观解释。
向量Xi与Xj之间的马氏距离定义为:
若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则Xi与Xj之间的马氏距离等于他们的欧氏距离:
若协方差矩阵是对角矩阵,则就是标准化欧氏距离。
Matlab计算马氏距离:
X=[1 2;1 3;2 2;3 1]; d=pdist(X,'mahal') d= 2.3452 2.0000 2.3452 1.2247 2.4495 1.2247
几何中,夹角余弦可用来衡量两个向量方向的差别;机器学习中,借用这一律念来衡量样本向量之间的差别。
即:
夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向彻底相反余弦取最小值-1。
Matlab计算夹角余弦(Matlab中的pdist(X, ‘cosine’)获得的是1减夹角余弦的值):
X=[1 1;1 2;2 5;1 -4]; d=1-pdist(X,'cosine') d= 0.9487 0.9191 -0.5145 0.9965 -0.7593 -0.8107
定义:两个等长字符串s1与s2的汉明距离为:将其中一个变为另一个所须要做的最小字符替换次数。例如:
The Hamming distance between "1011101" and "1001001" is 2. The Hamming distance between "2143896" and "2233796" is 3. The Hamming distance between "toned" and "roses" is 3.
汉明重量:是字符串相对于一样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数:对于二进制字符串来讲,就是 1 的个数,因此 11101 的汉明重量是 4。所以,若是向量空间中的元素a和b之间的汉明距离等于它们汉明重量的差a-b。
应用:汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。好比在信息编码过程当中,为了加强容错性,应使得编码间的最小汉明距离尽量大。可是,若是要比较两个不一样长度的字符串,不只要进行替换,并且要进行插入与删除的运算,在这种场合下,一般使用更加复杂的编辑距离等算法。
Matlab计算汉明距离(Matlab中2个向量之间的汉明距离的定义为2个向量不一样的份量所占的百分比):
X=[0 1 1;1 1 2;1 5 2]; d=pdist(X,'hamming') d= 0.6667 1.0000 0.3333
杰卡德类似系数(Jaccard similarity coefficient):两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德类似系数,用符号J(A,B)表示:
Matlab计算杰卡德距离(Matlab中将杰卡德距离定义为不一样的维度的个数占“非全零维度”的比例):
X=[1 1 0;1 -1 0;-1 1 0]; d=pdist(X,'jaccard') d= 0.5000 0.5000 1.0000
Matlab计算相关系数与相关距离:
X=[1 2 3 4;3 8 7 6]; c=corrcoef(X') %返回相关系数矩阵 d=pdist(X,'correlation') %返回相关距离 c= 1.0000 0.4781 0.4781 1.0000 d= 0.5219
以上的距离度量方法度量的皆为两个样本(向量)之间的距离,而信息熵描述的是整个系统内部样本之间的一个距离,或者称之为系统内样本分布的集中程度(一致程度)、分散程度、混乱程度(不一致程度)。系统内样本分布越分散(或者说分布越平均),信息熵就越大。分布越有序(或者说分布越集中),信息熵就越小。
信息熵的由来:请参考博客:XXXXXXXX。
计算给定的样本集X的信息熵的公式:
参数的含义:
n:样本集X的分类数
pi:X中第 i 类元素出现的几率
信息熵越大代表样本集S的分布越分散(分布均衡),信息熵越小则代表样本集X的分布越集中(分布不均衡)。当S中n个分类出现的几率同样大时(都是1/n),信息熵取最大值log2(n)。当X只有一个分类时,信息熵取最小值0。