成对观测值之间的两两距离
语法
D = pdist(X)
D = pdist(X,Distance)
D = pdist(X,Distance,DistParameter)
返回 D
= pdist(X
)X
中成对观测值之间的欧几里德距离。
使用 D
= pdist(X
,Distance
)Distance
指定的方法返回距离。
使用 D
= pdist(X
,Distance
,DistParameter
)Distance
和 DistParameter
指定的方法返回距离。仅当 Distance
是 'seuclidean'
、'minkowski'
或 'mahalanobis'
时,您才能指定 DistParameter
。
计算成对观测值之间的欧几里德距离,并使用 squareform
将距离向量转换为矩阵。
创建包含三个观测值和两个变量的矩阵。
rng('default') % For reproducibility X = rand(3,2);
计算欧几里德距离。
D = pdist(X)
D = 1×3 0.2954 1.0670 0.9448
两两距离按 (2,1)、(3,1)、(3,2) 顺序排列。通过使用 squareform
,您可以轻松定位观测值 i
和 j
之间的距离。
Z = squareform(D)
Z = 3×3 0 0.2954 1.0670 0.2954 0 0.9448 1.0670 0.9448 0
squareform
返回一个对称矩阵,其中 Z(i,j)
对应于观测值 i
和 j
之间的两两距离。例如,您可以找到观测值 2 和 3 之间的距离。
Z(2,3)
ans = 0.9448
将 Z
传递给 squareform
函数,以重现 pdist
函数的输出。
y = squareform(Z)
y = 1×3 0.2954 1.0670 0.9448
squareform
的输出 y
和 pdist
的输出 D
是相同的。
创建包含三个观测值和两个变量的矩阵。
rng('default') % For reproducibility X = rand(3,2);
使用默认指数 2 计算 Minkowski 距离。
D1 = pdist(X,'minkowski')
D1 = 1×3 0.2954 1.0670 0.9448
用指数 1 计算 Minkowski 距离,它等于 City block 距离。
D2 = pdist(X,'minkowski',1)
D2 = 1×3 0.3721 1.5036 1.3136
D3 = pdist(X,'cityblock')
D3 = 1×3 0.3721 1.5036 1.3136
定义一个忽略 NaN
值坐标的自定义距离函数,并使用该自定义距离函数计算两两距离。
创建包含三个观测值和两个变量的矩阵。
rng('default') % For reproducibility X = rand(3,2);
假设第一个观测值的第一个元素缺失。
X(1,1) = NaN;
计算欧几里德距离。
D1 = pdist(X)
D1 = NaN NaN 0.9448
如果观测值 i
或 j
包含 NaN
值,函数 pdist
为 i
和 j
之间的两两距离返回 NaN
。因此,D1(1) 和 D1(2),即 (2,1) 和 (3,1) 之间的两两距离,是 NaN
值。
定义一个自定义距离函数 naneucdist
,该函数忽略 NaN
值的坐标,并返回欧几里德距离。
function D2 = naneucdist(XI,XJ) %NANEUCDIST Euclidean distance ignoring coordinates with NaNs n = size(XI,2); sqdx = (XI-XJ).^2; nstar = sum(~isnan(sqdx),2); % Number of pairs that do not contain NaNs nstar(nstar == 0) = NaN; % To return NaN if all pairs include NaNs D2squared = nansum(sqdx,2).*n./nstar; % Correction for missing coordinates D2 = sqrt(D2squared);
将函数句柄作为输入参数传递给 pdist
,以使用 naneucdist
计算该距离。
D2 = pdist(X,@naneucdist)
D2 = 0.3974 1.1538 0.9448
X
- 输入数据输入数据,指定为大小是 m×n 的数值矩阵。行对应于单个观测值,列对应单个变量。
数据类型: single
| double
Distance
- 距离度量距离度量,指定为字符向量、字符串标量或函数句柄,如下表中所述。
值 | 说明 |
---|---|
'euclidean' |
欧几里德距离(默认值)。 |
'squaredeuclidean' |
欧几里德距离的平方。(此选项仅用于提高效率。它不满足三角不等式。) |
'seuclidean' |
标准化的欧几里德距离。每个观测值间坐标差都通过除以标准差 |
'mahalanobis' |
基于 |
'cityblock' |
City block 距离。 |
'minkowski' |
Minkowski 距离。默认指数是 2。使用 |
'chebychev' |
Chebychev 距离(最大坐标差)。 |
'cosine' |
1 减去点之间夹角的余弦值(视为向量)。 |
'correlation' |
1 减去点之间的样本相关性(视为值序列)。 |
'hamming' |
Hamming 距离,即相异坐标所占的百分比。 |
'jaccard' |
1 减去 Jaccard 系数,即非零相异坐标所占的百分比。 |
'spearman' |
1 减去样本观测值之间的 Spearman 秩相关(视为值序列)。 |
@ |
自定义距离函数句柄。距离函数的形式如下 function D2 = distfun(ZI,ZJ) % calculation of distance ...其中
对于非稀疏数据,使用内置距离函数计算距离通常比使用函数句柄更快。 |
有关定义,请参阅距离度量。
当您使用 'seuclidean'
、'minkowski'
或 'mahalanobis'
时,您可以指定额外的输入参数 DistParameter
来控制这些度量。您也可以像使用其他度量一样来使用这些度量,但这种情况下使用的是 DistParameter
的默认值。
示例: 'minkowski'
DistParameter
- 距离度量参数值距离度量参数值,指定为正标量、数值向量或数值矩阵。仅当您将 Distance
指定为 'seuclidean'
、'minkowski'
或 'mahalanobis'
时,此参数才有效。
如果 Distance
是 'seuclidean'
,DistParameter
是对应于每个维度的缩放因子的向量,指定为正向量。默认值为 nanstd(
。X
)
如果 Distance
是 'minkowski'
,DistParameter
是 Minkowski 距离的指数,指定为正标量。默认值为 2。
如果 Distance
是 'mahalanobis'
,DistParameter
是协方差矩阵,指定为数值矩阵。默认值为 nancov(X)
。DistParameter
必须是对称正定矩阵。
示例: 'minkowski',3
数据类型: single
| double
D
- 两两距离两两距离,以长度为 m(m–1)/2 的数值行向量形式返回,对应于成对观测值,其中 m 是 X
中的观测值数目。
距离按 (2,1)、(3,1)、...、(m,1)、(3,2)、...、(m,2)、...、(m,m–1) 顺序排列,即按列向排列 m×m 距离矩阵的左下三角元素。观测值 i 和 j 之间的两两距离对应于 D((i-1)*(m-i/2)+j-i),其中 i≤j。
您可以使用 squareform
函数将 D
转换为对称矩阵。Z = squareform(D)
返回 m×m 矩阵,其中 Z(i,j)
对应于观测值 i 和 j 之间的两两距离。
如果观测值 i 或 j 包含 NaN
,则对于内置距离函数,D
中的对应值为 NaN
。
D
通常在聚类或多维尺度分析中用作相异度矩阵。有关详细信息,请参阅Hierarchical Clustering以及 cmdscale
、cophenet
、linkage
、mdscale
和 optimalleaforder
的函数参考页。这些函数接受 D
作为输入参数。