一、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 x1, x2, ..., xm, the various distances between the vector xs and xt 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)'} }}$$

wherersj 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

下一篇:The Binomial Probability Distribution(二项分布)

matlab 韩明距离_科学网—Matlab中 pdist 函数详解(各种距离的生成) - 朱新宇的博文...相关推荐

  1. Matlab中 pdist 函数详解

    学习笔记,仅供参考,有错必纠 转载自:Matlab中 pdist 函数详解(各种距离的生成); pdist Pairwise distance between pairs of objects. Sy ...

  2. arcgis坐标系未定义_科学网—ArcGIS中的坐标系:基本概念和常用操作 - 李郎平的博文...

    ArcGIS中的坐标系:基本概念和常用操作 李郎平,Email: lilp@lreis.ac.cn 中国科学院地理科学与资源研究所,资源与环境信息系统国家重点实验室 缘由:介绍GIS(地理信息系统)中 ...

  3. matlab中xcorr函数详解

    Matlab中xcorr函数详解 引言 在matlab中查找相关函数时,找到了xcov函数和xcorr函数,仔细看了帮助文档,发现虽然计算公式不一样,但是两个函数用法相同,计算出的值也相同,于是在翻了 ...

  4. matlab中的mkdir函数_科学网—Matlab中计算函数运行时间的三种方法及判断新建文件夹 - 张伟的博文...

    (一)运行时间 1.tic和toc组合 计算daotic和toc之间那专段程序之间的属运行时间,它的经典格式为 : tic 函数 toc 复制函数代码,当代码遇到tic时Matlab自动开始计时,运行 ...

  5. matlab批量生成灰度图像_科学网—matlab彩色图像的批处理转换为灰度、二值和主成分图图像 - 金秀良的博文...

    这段代码主要用来进行图像的批处理转换为灰度.二值和主成分图图像,希望给大家借鉴.其中 RGB to bw可以直接实现,但是效果不好,所以先用RGB to gray,之后再gray to bw.RGB ...

  6. matlab stract结构_科学网—[MATLAB]方便快捷读取结构体里数个结构体内的数据 - 胡振东的博文...

    clc;clear;close all cd F:\01_DATA\Data_process\Glide load('Glide0.mat') % Glide0.mat里的Glide结构体有G1,G2 ...

  7. matlab不用科学计算法表示_科学网—MATLAB小技巧总结 - 李金磊的博文

    ①如何保存命令行窗口的历史命令? 打开MATLAB,进入主页:新建脚本文件,即"*.m"文件,这时会自动弹出"编辑器"窗口. 我们可以在脚本文件(编辑器)窗口中 ...

  8. matlab图片白边_科学网—[原创] matlab输出图片无白边 - 杨光的博文

    今天要做一个gif动画,可惜GIF Movie Gear不认eps文件,无奈只好输出png格式的文件,麻烦来了,输出的图像有白边!之前挥之不去的问题再一次来了.在网上搜索一个多小时,都是说什么先ims ...

  9. matlab trapz二重积分函数_科学网—MATLAB中的数值积分方法 - 王福昌的博文

    实际应用中在MATLAB里面都有开发好的命令可以使用,如  quad(), quadl(),quad2d(),triplequad() .需要掌握这些命令的用法. 1. 定积分 trapz(),qua ...

  10. java swing 左上角图标_科学网—Matlab: 学习GUI(修改窗口左上角图标而不warning) - 刘磊的博文...

    网上常用的方法: if ~isdeployed newIcon=javax.swing.ImageIcon('.piciap.jpg'); else newIcon=javax.swing.Image ...

最新文章

  1. win7没有个性化如何把计算机放到桌面,win7系统家庭版右键没有个性化设置桌面壁纸...
  2. exp oracle所有数据库命令,oracle数据库exp命令
  3. pytorch笔记:搭建简易CNN
  4. 2021第三封拒信来自哈佛大学计算机科学与技术专业~
  5. convert.todatetime指定日期格式_SQL基础知识V2——常用日期函数
  6. mysql skip_counter_mysql的三个故障解决小结
  7. python json loads 中文乱码_python实现智能语音天气预报
  8. nodejs爬虫实战_实战nodejs写网络爬虫
  9. Windows下载最新谷歌浏览器
  10. 什么是前台?什么是中台?什么是后台?
  11. python从键盘输入一个字符串将小_python如何从键盘获取输入实例
  12. Python 百分号打头的行命令
  13. java黄金分割_黄金分式与黄金分割数(Java实现)
  14. gb酱油和gbt酱油哪个好_酱油标准代码GB与GB/T有什么区别
  15. 【转载】微信公众平台发展趋势猜想
  16. vue-i18n的使用,前端实现中英文切换
  17. 郭逸淵:4月7日比特幣(BTC)以太坊(ETH)行情分析及布局思路
  18. 【PowerPoint】如何在PPT幻灯片添加“当前页/总页数”格式的页码
  19. java h d,Java HijrahChronology zonedDateTime(TemporalAccessor)用法及代码示例
  20. 要闻君说:阿里云联合8家芯片模组商推出“全平台通信模组”;北汽与小桔车服联合“京桔”;IBM要帮助印度公司打造5G战略!...

热门文章

  1. php异步表单,利用ajax实现表单的异步互动——2018年4月10日
  2. echarts环形图加边框
  3. Hexo + coding 博客的搭建和优化
  4. PhpStorm中如何使用Xdebug工具,入门级操作方法
  5. HTML 学习笔记一
  6. oracle查询特殊字符-escape
  7. 一步一步理解日历calendar(一)
  8. Java静态变量小感
  9. spring 事务的传播行为详解(转)
  10. 关于vue自定义事件中,传递参数的一点理解