文档

pdist2

两组之间两两距离观察

描述

例子

D= pdist2 (X, Y,距离)返回每一对观测之间的距离XY使用指定的度量距离

例子

D= pdist2 (X, Y,距离,DistParameter)返回指定的距离使用公制距离DistParameter。您可以指定DistParameter只有当距离“seuclidean”,闵可夫斯基的,或“mahalanobis”

D= pdist2 (___,名称,值)指定一个附加选项使用一个名称-值对的参数“最小”“最大”除了任何参数在前面的语法。

例如,

  • D = pdist2 (X, Y,距离,“最小”,K)使用指定的度量计算的距离距离并返回K最小的两两距离观察X为每一个观察Y以升序排序。

  • D = pdist2 (X, Y,距离,DistParameter,“最大”,K)使用指定的度量计算的距离距离DistParameter并返回K最大的两两距离降序排序。

例子

(D,)= pdist2 (___,名称,值)还返回矩阵。矩阵包含了指标的观察X对应的距离D

例子

全部折叠

创建两个矩阵和三个观察和两个变量。

rng (“默认”)%的再现性X =兰德(3 2);Y =兰德(3 2);

计算欧氏距离。输入参数的默认值距离“欧几里得”。当计算欧氏距离不使用一个名称-值对的论点,你不需要指定距离

D = pdist2 (X, Y)
D =3×30.5387 0.8018 0.1538 0.7100 0.5951 0.3422 0.8805 0.4242 1.2050

D (i, j)对应于两两之间的距离观察X和观察jY

创建两个矩阵和三个观察和两个变量。

rng (“默认”)%的再现性X =兰德(3 2);Y =兰德(3 2);

使用默认计算闵可夫斯基距离指数2。

D1 = pdist2 (X, Y,闵可夫斯基的)
D1 =3×30.5387 0.8018 0.1538 0.7100 0.5951 0.3422 0.8805 0.4242 1.2050

计算闵可夫斯基距离指数为1,等于该街区距离。

D2 = pdist2 (X, Y,闵可夫斯基的,1)
D2 =3×30.5877 1.0236 0.2000 0.9598 0.8337 0.3899 1.0189 0.4800 1.7036
D3 = pdist2 (X, Y,“cityblock”)
D3 =3×30.5877 1.0236 0.2000 0.9598 0.8337 0.3899 1.0189 0.4800 1.7036

创建两个矩阵和三个观察和两个变量。

rng (“默认”)%的再现性X =兰德(3 2);Y =兰德(3 2);

找到两个最小的成对欧几里得距离观察X为每一个观察Y

[D,我]= pdist2 (X, Y,“欧几里得”,“最小”,2)
D =2×30.5387 0.4242 0.1538 0.7100 0.5951 0.3422
我=2×31 3 1 2 2 2

为每一个观察Y,pdist2发现两个最小距离通过计算和比较值的所有观测的距离X。函数类型的距离在每一列的D以升序排序。包含了指标的观察X对应的距离D

定义一个自定义距离函数忽略了坐标值,计算两两距离通过使用自定义距离函数。

创建两个矩阵和三个观察和三个变量。

rng (“默认”)%的再现性X =兰德(3、3)Y = [X(: 1:2)兰德(3,1)]
X = Y 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575 = 0.8147 0.9134 0.9649 0.9058 0.6324 0.1576 0.1270 0.0975 0.9706

前两列的X和Y是相同的。假设X (1,1)不见了。

X (1, 1) = NaN
X =南0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575

计算出汉明距离。

D1 = pdist2 (X, Y,“汉明”)
D1 =南南南1.0000 0.3333 1.0000 1.0000 1.0000 0.3333

如果观察X或观察jY包含值,函数pdist2返回两两之间的距离j。因此,D1 (1, 1), D1(1、2),和D1 (1、3)值。

定义一个自定义距离函数nanhamdist忽略了坐标,汉明距离值和计算。在处理大量的观察,可以通过循环计算距离更快的坐标数据。

函数D2 = nanhamdist (XI, XJ)% NANHAMDIST汉明距离忽略坐标nan[m p] =大小(XJ);nesum = 0 (m, 1);pstar = 0 (m, 1);q = 1: p notnan = ~ (isnan(ξ(q)) | isnan (XJ (:, q)));nesum = nesum + (XI (q) ~ = XJ (:, q) & notnan);pstar = pstar + notnan;结束D2 = nesum. / pstar;

计算距离nanhamdist通过传递函数的句柄作为输入参数pdist2

@nanhamdist D2 = pdist2 (X, Y)
D2 = 0.5000 1.0000 1.0000 1.0000 0.3333 1.0000 1.0000 1.0000 0.3333

kmeans执行k——集群分区的数据k集群。当你有一个集群的新数据集,您可以创建新集群,包括通过使用现有的数据和新的数据kmeans。的kmeans函数支持C / c金宝app++代码生成,可以生成代码接受训练数据并返回聚类结果,然后将代码部署到设备。在这个工作流程中,您必须通过训练数据,可以相当大的规模。节省内存的设备,您可以通过使用单独的训练和预测kmeanspdist2,分别。

使用kmeans在MATLAB®创建集群和使用pdist2在生成的代码将新数据分配给现有的集群。代码生成,定义一个入口点函数接受集群质心位置和新的数据集,并返回该指数最近的集群。然后,生成代码的入口点函数。

生成C / c++代码需要MATLAB®编码器™。

执行k聚类则

使用三个生成一个训练数据集分布。

rng (“默认”)%的再现性X = [randn(100 2) * 0.75 +(100 2)的;randn(100 2) * 0.5的(100 2);randn (100 2) * 0.75);

通过使用训练数据分割成三个集群kmeans

[idx C] = kmeans (X, 3);

集群和集群质心的阴谋。

图gscatter (X (: 1), (:, 2), idx,“bgm”)举行情节(C (: 1), C (:, 2),“kx”)传说(“集群1”,《集群2》,“集群3”,聚类质心的)

将新数据分配给现有的集群

生成测试数据集。

Xtest = [randn(10, 2) * 0.75 +的(10,2);randn(10, 2) * 0.5的(10,2);randn (10, 2) * 0.75);

使用现有的集群测试数据集进行分类。找到最近的重心从每个测试数据点用pdist2

[~,idx_test] = pdist2 (C Xtest“欧几里得”,“最小”1);

情节的测试数据和标签使用的测试数据idx_test通过使用gscatter

gscatter (Xtest (: 1) Xtest (:, 2), idx_test,“bgm”,“哦”)传说(“集群1”,《集群2》,“集群3”,聚类质心的,集群的数据分类1 ',集群的数据分类2》,集群的数据分类3 ')

生成代码

生成C代码,将新数据赋给现有的集群。注意,生成C / c++代码需要MATLAB®编码器™。

定义一个入口点函数命名findNearestCentroid接受质心位置和新数据,然后找到最近的集群使用pdist2

添加% # codegen编译器指令(或编译指示)的入口点函数函数签名后,表明您打算为MATLAB算法生成代码。添加这个指令指示MATLAB代码分析器来帮助您诊断和解决违规,将导致错误在代码生成。

类型findNearestCentroid%显示findNearestCentroid.m内容
函数idx = findNearestCentroid (C、X) % # codegen [~, idx] = pdist2 (C、X、“欧几里得”、“最小”,1);%找到最近的重心

注意:如果单击按钮位于这个页面的右上角部分并在MATLAB®开设这个例子,然后用MATLAB®打开示例文件夹。这个文件夹包含的入口点函数文件。

通过使用生成代码codegen。因为C和c++静态类型语言中,您必须确定所有变量的属性在编译时的入口点函数。指定的数据类型和数组大小的输入findNearestCentroid,通过MATLAB表达式表示的值和一定的数据类型和数组大小使用arg游戏选择。有关详细信息,请参见为代码生成指定适应可变参数

codegenfindNearestCentroidarg游戏{C, Xtest}

                    

codegen生成墨西哥人的功能findNearestCentroid_mex与平台相关的扩展。

验证所生成的代码。

myIndx = findNearestCentroid (C, Xtest);myIndex_mex = findNearestCentroid_mex (C, Xtest);verifyMEX = isequal (idx_test myIndx myIndex_mex)
verifyMEX =逻辑1

isequal返回逻辑1 (真正的),这意味着所有的输入都是平等的。确认进行了比较pdist2函数,findNearestCentroid功能,墨西哥人返回相同的指数函数。

你还可以生成优化的CUDA®代码使用GPU编码器™。

cfg = coder.gpuConfig (墨西哥人的);codegen配置cfgfindNearestCentroidarg游戏{C, Xtest}

代码生成的更多信息,请参阅通用代码生成工作流。GPU编码器的更多信息,请参阅开始使用GPU编码器(GPU编码器)和金宝app支持功能(GPU编码器)。

输入参数

全部折叠

输入数据,指定为一个数字矩阵。X是一个mx——- - - - - -n矩阵和Y是一个我的——- - - - - -n矩阵。行对应于个人观察,列对应单个变量。

数据类型:|

距离度量,指定为一个特征向量,字符串标量,或函数处理,如下表所述。

价值 描述
“欧几里得”

欧氏距离(默认)。

“squaredeuclidean”

平方欧氏距离。(此选项仅供效率。它不满足三角不等式)。

“seuclidean”

标准化的欧氏距离。每个坐标差异观察是通过除以相应的扩展元素的标准差,S =nanstd(X)。使用DistParameter指定一个值年代

“mahalanobis”

而使用的样本协方差距离X,C =nancov(X)。使用DistParameter指定一个值C,矩阵C是对称的正定。

“cityblock”

城市街区的距离。

闵可夫斯基的

闵可夫斯基距离。默认的指数是2。使用DistParameter指定一个不同的指数P,在那里P是一个积极的标量值的指数。

“chebychev”

Chebychev距离(最大坐标差异)。

的余弦

1 -之间的夹角的余弦值点(视为向量)。

“相关”

1 -样本点之间的相关性(作为序列的值)。

“汉明”

汉明距离,协调不同的百分比。

“jaccard”

1 - Jaccard系数,非零坐标不同的百分比。

“枪兵”

1 -样本之间的斯皮尔曼等级相关的观察(作为序列的值)。

@distfun

自定义距离函数处理。距离函数的形式

函数ZJ D2 = distfun(子)%计算距离
在哪里

  • 是一个1——- - - - - -n向量包含一个观察。

  • ZJ是一个平方米——- - - - - -n包含多个观测矩阵。distfun必须接受一个矩阵ZJ与任意数量的观察。

  • D2是一个平方米——- - - - - -1距离向量,D2 (k)是观察之间的距离ZJ (k,:)

如果你的数据不是稀疏的,你可以通过使用一个内置的通常更快的计算距离的距离而不是一个函数处理。

定义,请参阅距离度量

当你使用“seuclidean”,闵可夫斯基的,或“mahalanobis”,您可以指定一个额外的输入参数DistParameter控制这些指标。你也可以以同样的方式使用这些指标作为默认值的其他指标DistParameter

例子:闵可夫斯基的

距离度量参数值,指定为一个积极的标量,数值向量,或数字矩阵。这个论证是有效的只有当你指定距离作为“seuclidean”,闵可夫斯基的,或“mahalanobis”

  • 如果距离“seuclidean”,DistParameter为每个维度是一个向量扩展因素,指定为一个积极的向量。默认值是nanstd (X)

  • 如果距离闵可夫斯基的,DistParameter的指数是闵可夫斯基距离,指定为一个积极的标量。默认值是2。

  • 如果距离“mahalanobis”,DistParameter协方差矩阵,指定为一个数字矩阵。默认值是nancov (X)DistParameter必须是对称的,正定。

例子:闵可夫斯基,3

数据类型:|

名称-值对的观点

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

例子:要么“最小”,K“最大”,K。你不能同时使用“最小”“最大”

数量的最小距离,指定为逗号分隔组成的“最小”和一个正整数。如果您指定“最小”,然后pdist2每一列的距离D以升序排序。

例子:“最小”,3

数据类型:|

的最大距离,指定为逗号分隔组成的“最大”和一个正整数。如果您指定“最大”,然后pdist2每一列的距离D在降序排列。

例子:“最大”,3

数据类型:|

输出参数

全部折叠

两两距离,作为一个数字矩阵返回。

如果你不指定“最小”“最大”,然后D是一个mx——- - - - - -我的矩阵,mx我的观察的数量吗XY,分别。D (i, j)是观察之间的距离X和观察jY。如果观察X或观察jY包含,然后D (i, j)内置的距离函数。

如果您指定“最小”“最大”作为K,然后D是一个K——- - - - - -我的矩阵。D包含的K最小的或K最大的两两距离观察X为每一个观察Y。为每一个观察Y,pdist2找到了K最小或最大距离通过计算和比较值的所有观测的距离X。如果K大于mx,pdist2返回一个mx——- - - - - -我的矩阵。

指数,作为一个正整数返回矩阵。一样的尺寸吗D包含了指标的观察X对应的距离D

更多关于

全部折叠

距离度量

距离度量是一个函数,定义了两个观测之间的距离。pdist2金宝app支持各种距离度量:欧氏距离、标准化的欧氏距离,Mahalanobis距离,街区距离,闵可夫斯基距离,Chebychev距离,余弦距离、相关距离,汉明距离、Jaccard距离,和枪兵的距离。

给定一个mx——- - - - - -n数据矩阵X,这被视为mx(1 -n)行向量x1,x2、……xmx和一个我的——- - - - - -n数据矩阵Y,这被视为我的(1 -n)行向量y1,y2、……y我的,各种向量之间的距离x年代yt定义如下:

  • 欧氏距离

    d 年代 t 2 = ( x 年代 y t ) ( x 年代 y t )

    的欧几里得距离是一个特例闵可夫斯基距离,p= 2

  • 标准化的欧几里得距离

    d 年代 t 2 = ( x 年代 y t ) V 1 ( x 年代 y t ) ,

    在哪里Vn——- - - - - -n对角矩阵的jth对角线元素是(年代(j))2,在那里年代是一个向量的每个维度的比例因素。

  • Mahalanobis距离

    d 年代 t 2 = ( x 年代 y t ) C 1 ( x 年代 y t ) ,

    在哪里C协方差矩阵。

  • 城市街区的距离

    d 年代 t = j = 1 n | x 年代 j y t j |

    城市街区的距离是一个特例的闵可夫斯基距离,p= 1

  • 闵可夫斯基距离

    d 年代 t = j = 1 n | x 年代 j y t j | p p

    的特殊情况p= 1闵可夫斯基距离给出了城市街区距离。的特殊情况p= 2闵可夫斯基距离给出了欧氏距离。的特殊情况p=∞闵可夫斯基距离给Chebychev距离。

  • Chebychev距离

    d 年代 t = 马克斯 j { | x 年代 j y t j | }

    距离Chebychev闵可夫斯基距离是一个特例,在哪里p=∞

  • 余弦距离

    d 年代 t = ( 1 x 年代 y t ( x 年代 x 年代 ) ( y t y t ) )

  • 相关距离

    d 年代 t = 1 ( x 年代 x ¯ 年代 ) ( y t y ¯ t ) ( x 年代 x ¯ 年代 ) ( x 年代 x ¯ 年代 ) ( y t y ¯ t ) ( y t y ¯ t ) ,

    在哪里

    x ¯ 年代 = 1 n j x 年代 j

    y ¯ t = 1 n j y t j

  • 汉明距离

    d 年代 t = ( # ( x 年代 j y t j ) / n )

  • Jaccard距离

    d 年代 t = # ( ( x 年代 j y t j ) ( ( x 年代 j 0 ) ( y t j 0 ) ) ] # ( ( x 年代 j 0 ) ( y t j 0 ) ]

  • 斯皮尔曼的距离

    d 年代 t = 1 ( r 年代 r ¯ 年代 ) ( r t r ¯ t ) ( r 年代 r ¯ 年代 ) ( r 年代 r ¯ 年代 ) ( r t r ¯ t ) ( r t r ¯ t ) ,

    在哪里

    • rsj的排名是xsj接管x1j,x2j,……xmx j所计算的tiedrank

    • rtj的排名是ytj接管y1j,y2j,……y我,我所计算的tiedrank

    • r年代rt的坐标态等级向量x年代yt,也就是说,r年代= (r年代1,r年代2,……rsn),rt= (rt1,rt2,……rtn)。

    • r ¯ 年代 = 1 n j r 年代 j = ( n + 1 ) 2

    • r ¯ t = 1 n j r t j = ( n + 1 ) 2

扩展功能

介绍了R2010a