MATLAB 距离函数及用法 | 您所在的位置:网站首页 › matlab计算ln4 › MATLAB 距离函数及用法 |
主要介绍pdist2 ,其它可参考matlab help
D = pdist2(X,Y)D = pdist2(X,Y,distance)D = pdist2(X,Y,'minkowski',P)D = pdist2(X,Y,'mahalanobis',C)D = pdist2(X,Y,distance,'Smallest',K)D = pdist2(X,Y,distance,'Largest',K)[D,I] = pdist2(X,Y,distance,'Smallest',K)[D,I] = pdist2(X,Y,distance,'Largest',K)
练习: 2种计算方式,一种直接利用pdist计算,另一种按公式(见最后理论)直接计算。 % distance clc;clear;x = rand(4,3)y = rand(1,3) for i =1:size(x,1) for j =1:size(y,1) a = x(i,:); b=y(j,:); % Euclidean distance d1(i,j)=sqrt((a-b)*(a-b)'); % Standardized Euclidean distance V = diag(1./std(x).^2); d2(i,j)=sqrt((a-b)*V*(a-b)'); % Mahalanobis distance C = cov(x); d3(i,j)=sqrt((a-b)*pinv(C)*(a-b)'); % City block metric d4(i,j)=sum(abs(a-b)); % Minkowski metric p=3; d5(i,j)=(sum(abs(a-b).^p))^(1/p); % Chebychev distance d6(i,j)=max(abs(a-b)); % Cosine distance d7(i,j)=1-(a*b')/sqrt(a*a'*b*b'); % Correlation distance ac = a-mean(a); bc = b-mean(b); d8(i,j)=1- ac*bc'/(sqrt(sum(ac.^2))*sqrt(sum(bc.^2))); endend md1 = pdist2(x,y,'Euclidean'); md2 = pdist2(x,y,'seuclidean'); md3 = pdist2(x,y,'mahalanobis'); md4 = pdist2(x,y,'cityblock'); md5 = pdist2(x,y,'minkowski',p); md6 = pdist2(x,y,'chebychev'); md7 = pdist2(x,y,'cosine'); md8 = pdist2(x,y,'correlation'); md9 = pdist2(x,y,'hamming'); md10 = pdist2(x,y,'jaccard');md11 = pdist2(x,y,'spearman'); D1=[d1,md1],D2=[d2,md2],D3=[d3,md3] D4=[d4,md4],D5=[d5,md5],D6=[d6,md6] D7=[d7,md7],D8=[d8,md8] md9,md10,md11
运行结果如下:
x = 0.5225 0.6382 0.6837 0.3972 0.5454 0.2888 0.8135 0.0440 0.0690 0.6608 0.5943 0.8384 y = 0.5898 0.7848 0.4977 D1 = 0.2462 0.2462 0.3716 0.3716 0.8848 0.8848 0.3967 0.3967 D2 = 0.8355 0.8355 1.5003 1.5003 3.1915 3.1915 1.2483 1.2483 D3 = 439.5074 439.5074 437.5606 437.5606 438.3339 438.3339 437.2702 437.2702 D4 = 0.3999 0.3999 0.6410 0.6410 1.3934 1.3934 0.6021 0.6021 D5 = 0.2147 0.2147 0.3107 0.3107 0.7919 0.7919 0.3603 0.3603 D6 = 0.1860 0.1860 0.2395 0.2395 0.7409 0.7409 0.3406 0.3406 D7 = 0.0253 0.0253 0.0022 0.0022 0.3904 0.3904 0.0531 0.0531 D8 = 1.0731 1.0731 0.0066 0.0066 1.2308 1.2308 1.8954 1.8954 md9 = 1 1 1 1 md10 = 1 1 1 1 md11 = 1.5000 0.0000 1.5000 2.0000
基本理论公式如下: 转自:http://blog.sina.com.cn/s/blog_57235cc70100jjf8.html 一、pdist Pairwise distance between pairs of objects Syntax D = pdist(X) D = pdist(X, distance) Description D = pdist(X) 计算 X 中各对行向量的相互距离(X是一个m-by-n的矩阵). 这里 D 要特别注意,D 是一个长为 m( m–1)/2的 行向量.可以这样理解 D 的生成:首先生成一个 X 的距离方阵,由于该方阵是对称的,令对角线上的元素为0,所以取此方阵的下三角元素,按照Matlab中矩阵的按列存储原则,此下三角各元素的索引排列即为(2,1), (3,1), ..., ( m,1), (3,2), ..., ( m,2), ..., ( m, m–1).可以用命令 squareform(D) 将此行向量转换为原距离方阵.(squareform函数是专门干这事的,其逆变换是也是squareform。) D = pdist(X, distance) 使用指定的距离.distance可以取下面圆括号中的值,用红色标出! Metrics Given an m-by- n data matrix X, which is treated as m (1-by- n) row vectors x 1, x 2, ..., x m, the various distances between the vector x s and x t are defined as follows:欧几里德距离Euclidean distance('euclidean') Notice that the Euclidean distance is a special case of the Minkowski metric, where p = 2. 欧氏距离虽然很有用,但也有明显的缺点。 一:它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。 二:它没有考虑各变量的数量级(量纲),容易犯大数吃小数的毛病。所以,可以先对原始数据进行规范化处理再进行距离计算。 标准欧几里德距离Standardized Euclidean distance( 'seuclidean') where V is the n-by- n diagonal matrix whose jth diagonal element is S( j) 2, where S is the vector of standard deviations. 相比单纯的欧氏距离,标准欧氏距离能够有效的解决上述缺点。注意,这里的V在许多Matlab函数中是可以自己设定的,不一定非得取标准差,可以依据各变量的重要程度设置不同的值,如knnsearch函数中的Scale属性。马哈拉诺比斯距离Mahalanobis distance('mahalanobis') where C is the covariance matrix. 马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧式距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧式距离,如果协方差矩阵为对角阵,则其也可称为正规化的欧氏距离.马氏优缺点: 1)马氏距离的计算是建立在总体样本的基础上的,因为C是由总样本计算而来,所以马氏距离的计算是不稳定的; 2)在计算马氏距离过程中,要求总体样本数大于样本的维数。 3)协方差矩阵的逆矩阵可能不存在。曼哈顿距离(城市区块距离)City block metric('cityblock') Notice that the city block distance is a special case of the Minkowski metric, where p=1.闵可夫斯基距离Minkowski metric('minkowski') Notice that for the special case of p = 1, the Minkowski metric gives the city block metric, for the special case of p = 2, the Minkowski metric gives the Euclidean distance, and for the special case of p = ∞, the Minkowski metric gives the Chebychev distance. 闵可夫斯基距离由于是欧氏距离的推广,所以其缺点与欧氏距离大致相同。 切比雪夫距离Chebychev distance( 'chebychev') Notice that the Chebychev distance is a special case of the Minkowski metric, where p = ∞. 夹角余弦距离Cosine distance( 'cosine') 与Jaccard距离相比,Cosine距离不仅忽略0-0匹配,而且能够处理非二元向量,即考虑到变量值的大小。 相关距离Correlation distance( 'correlation') Correlation距离主要用来度量两个向量的线性相关程度。 汉明距离Hamming distance( 'hamming') 两个向量之间的汉明距离的定义为两个向量不同的变量个数所占变量总数的百分比。 杰卡德距离Jaccard distance( 'jaccard') Jaccard距离常用来处理仅包含非对称的二元(0-1)属性的对象。很显然,Jaccard距离不关心0-0匹配,而Hamming距离关心0-0匹配。 Spearman distance( 'spearman') where rsj is the rank of xsj taken over x1j, x2j, ... xmj, as computed by tiedrank rs and rt are the coordinate-wise rank vectors of xs and xt, i.e., rs = ( rs1, rs2, ... rsn) 二、pdist2 Pairwise distance between two sets of observations Syntax D = pdist2(X,Y) D = pdist2(X,Y,distance) D = pdist2(X,Y,'minkowski',P) D = pdist2(X,Y,'mahalanobis',C) D = pdist2(X,Y,distance,'Smallest',K) D = pdist2(X,Y,distance,'Largest',K) [D,I] = pdist2(X,Y,distance,'Smallest',K) [D,I] = pdist2(X,Y,distance,'Largest',K) Description 这里 X 是 mx-by-n 维矩阵,Y 是 my-by-n 维矩阵,生成 mx-by-my 维距离矩阵 D。 [D,I] = pdist2(X,Y,distance,'Smallest',K) 生成 K-by-my 维矩阵 D 和同维矩阵 I,其中D的每列是原距离矩阵中最小的元素,按从小到大排列,I 中对应的列即为其索引号。注意,这里每列各自独立地取 K 个最小值。 例如,令原mx-by-my 维距离矩阵为A,则 K-by-my 维矩阵 D 满足 D(:,j)=A(I(:,j),j). 一、pdist Pairwise distance between pairs of objects Syntax D = pdist(X) D = pdist(X, distance) Description D = pdist(X) 计算 X 中各对行向量的相互距离(X是一个m-by-n的矩阵). 这里 D 要特别注意,D 是一个长为 m( m–1)/2的 行向量.可以这样理解 D 的生成:首先生成一个 X 的距离方阵,由于该方阵是对称的,令对角线上的元素为0,所以取此方阵的下三角元素,按照Matlab中矩阵的按列存储原则,此下三角各元素的索引排列即为(2,1), (3,1), ..., ( m,1), (3,2), ..., ( m,2), ..., ( m, m–1).可以用命令 squareform(D) 将此行向量转换为原距离方阵.(squareform函数是专门干这事的,其逆变换是也是squareform。) D = pdist(X, distance) 使用指定的距离.distance可以取下面圆括号中的值,用红色标出! Metrics Given an m-by- n data matrix X, which is treated as m (1-by- n) row vectors x 1, x 2, ..., x m, the various distances between the vector x s and x t are defined as follows:欧几里德距离Euclidean distance('euclidean') $$d_{s,\;t}^2 = \left( {{x_s} - {x_t}} \right) \cdot \left( {{x_s} - {x_t}} \right)'$$ Notice that the Euclidean distance is a special case of the Minkowski metric, where p = 2. 欧氏距离虽然很有用,但也有明显的缺点。 一:它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。 二:它没有考虑各变量的数量级(量纲),容易犯大数吃小数的毛病。所以,可以先对原始数据进行规范化处理再进行距离计算。 标准欧几里德距离Standardized Euclidean distance( 'seuclidean') $$d_{s,\;t}^2 = \left( {{x_s} - {x_t}} \right){V^{ - 1}}\left( {{x_s} - {x_t}} \right)'$$ where V is the n-by- n diagonal matrix whose jth diagonal element is S( j) 2, where S is the vector of standard deviations. 相比单纯的欧氏距离,标准欧氏距离能够有效的解决上述缺点。注意,这里的V在许多Matlab函数中是可以自己设定的,不一定非得取标准差,可以依据各变量的重要程度设置不同的值,如knnsearch函数中的Scale属性。马哈拉诺比斯距离Mahalanobis distance('mahalanobis')$$d_{s,\;t}^2 = \left( {{x_s} - {x_t}} \right){C^{ - 1}}\left( {{x_s} - {x_t}} \right)'$$ where C is the covariance matrix. 马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧式距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧式距离,如果协方差矩阵为对角阵,则其也可称为正规化的欧氏距离.马氏优缺点: 1)马氏距离的计算是建立在总体样本的基础上的,因为C是由总样本计算而来,所以马氏距离的计算是不稳定的; 2)在计算马氏距离过程中,要求总体样本数大于样本的维数。 3)协方差矩阵的逆矩阵可能不存在。曼哈顿距离(城市区块距离)City block metric('cityblock')$$d_{s,\;t}^{} = \sum\limits_{j = 1}^n {\left| {{x_{{s_j}}} - {x_{{t_j}}}} \right|} $$ Notice that the city block distance is a special case of the Minkowski metric, where p=1. 闵可夫斯基距离Minkowski metric('minkowski')$$d_{s,\;t}^{} = \sqrt[p]{{\sum\limits_{j = 1}^n {{{\left| {{x_{{s_j}}} - {x_{{t_j}}}} \right|}^p}} }}$$ Notice that for the special case of p = 1, the Minkowski metric gives the city block metric, for the special case of p = 2, the Minkowski metric gives the Euclidean distance, and for the special case of p = ∞, the Minkowski metric gives the Chebychev distance. 闵可夫斯基距离由于是欧氏距离的推广,所以其缺点与欧氏距离大致相同。 切比雪夫距离Chebychev distance( 'chebychev') $$d_{s,\;t}^{} = {\max _j}\left| {{x_{{s_j}}} - {x_{{t_j}}}} \right|$$ Notice that the Chebychev distance is a special case of the Minkowski metric, where p = ∞. 夹角余弦距离Cosine distance( 'cosine') $$d_{s,\;t}^{} = 1 - \frac{{{x_s}{x_t}'}}{{{{\left\| {{x_s}} \right\|}_2} \cdot {{\left\| {{x_t}} \right\|}_2}}}$$ 与Jaccard距离相比,Cosine距离不仅忽略0-0匹配,而且能够处理非二元向量,即考虑到变量值的大小。 相关距离Correlation distance( 'correlation') $$d_{s,\;t}^{} = 1 - \frac{{{x_s}{x_t}'}}{{\sqrt {\left( {{x_s} - \overline {{x_s}} } \right) \cdot \left( {{x_s} - \overline {{x_s}} } \right)'} \cdot \sqrt {\left( {{x_t} - \overline {{x_t}} } \right) \cdot \left( {{x_t} - \overline {{x_t}} } \right)'} }}$$ Correlation距离主要用来度量两个向量的线性相关程度。 汉明距离Hamming distance( 'hamming') $$d_{s,\;t}^{} = \left( {\frac{{\# ({x_{{s_j}}} \ne {x_{{t_j}}})}}{n}} \right)$$ 两个向量之间的汉明距离的定义为两个向量不同的变量个数所占变量总数的百分比。 杰卡德距离Jaccard distance( 'jaccard') $$d_{s,\;t}^{} = \left( {\frac{{\# \left[ {({x_{{s_j}}} \ne {x_{{t_j}}}) \cap \left( {({x_{{s_j}}} \ne 0) \cup ({x_{{t_j}}} \ne 0)} \right)} \right]}}{{\# \left[ {({x_{{s_j}}} \ne 0) \cup ({x_{{t_j}}} \ne 0)} \right]}}} \right)$$ Jaccard距离常用来处理仅包含非对称的二元(0-1)属性的对象。很显然,Jaccard距离不关心0-0匹配,而Hamming距离关心0-0匹配。 Spearman distance( 'spearman') $$d_{s,\;t}^{} = 1 - \frac{{\left( {{r_s} - \overline {{r_s}} } \right)\left( {{r_t} - \overline {{r_t}} } \right)'}}{{\sqrt {\left( {{r_s} - \overline {{r_s}} } \right)\left( {{r_s} - \overline {{r_s}} } \right)'} \sqrt {\left( {{r_t} - \overline {{r_t}} } \right)\left( {{r_t} - \overline {{r_t}} } \right)'} }}$$ where rsj is the rank of xsj taken over x1j, x2j, ... xmj, as computed by tiedrank rs and rt are the coordinate-wise rank vectors of xs and xt, i.e., rs = ( rs1, rs2, ... rsn) $\overline {{r_s}} = \frac{1}{n}\sum\limits_j {{r_{{s_j}}}} = \frac{{n + 1}}{2}$ $\overline{{r_t}} = \frac{1}{n}\sum\limits_j {{r_{{t_j}}}} = \frac{{n + 1}}{2}$ 二、pdist2 Pairwise distance between two sets of observations Syntax D = pdist2(X,Y) D = pdist2(X,Y,distance) D = pdist2(X,Y,'minkowski',P) D = pdist2(X,Y,'mahalanobis',C) D = pdist2(X,Y,distance,'Smallest',K) D = pdist2(X,Y,distance,'Largest',K) [D,I] = pdist2(X,Y,distance,'Smallest',K) [D,I] = pdist2(X,Y,distance,'Largest',K) Description 这里 X 是 mx-by-n 维矩阵,Y 是 my-by-n 维矩阵,生成 mx-by-my 维距离矩阵 D。 [D,I] = pdist2(X,Y,distance,'Smallest',K) 生成 K-by-my 维矩阵 D 和同维矩阵 I,其中D的每列是原距离矩阵中最小的元素,按从小到大排列,I 中对应的列即为其索引号。注意,这里每列各自独立地取 K 个最小值。 例如,令原mx-by-my 维距离矩阵为A,则 K-by-my 维矩阵 D 满足 D(:,j)=A(I(:,j),j). 转载本文请联系原作者获取授权,同时请注明本文来自朱新宇科学网博客。 链接地址: http://blog.sciencenet.cn/blog-531885-589056.html |
CopyRight 2018-2019 实验室设备网 版权所有 |