matlab pdist2函數官方詳解

pdist2

兩組觀測之間的成對距離


句法

D = pdist2(X,Y,Distance)

D = pdist2(X,Y,Distance,DistParameter)

D = pdist2(___,Name,Value)

[D,I] = pdist2(___,Name,Value)


描述

D = pdist2(X,Y,Distance)中的每一對觀測之間的距離。XY使用Distance.

D = pdist2(X,Y,Distance,DistParameter)指定的度量返回距離。DistanceDistParameter。您可以指定DistParameter只有當Distance'seuclidean''minkowski',或'mahalanobis'.

D = pdist2(___,Name,Value)使用名稱-值對參數之一指定附加選項。'Smallest''Largest'除了以前語法中的任何參數之外。

例如,

  • D = pdist2(X,Y,Distance,'Smallest',K)指定的度量計算距離。Distance並返回K與觀測的最小成對距離X中的每一次觀察Y按升序排列。

  • D = pdist2(X,Y,Distance,DistParameter,'Largest',K)指定的度量計算距離。DistanceDistParameter並返回K按降序排列的最大成對距離。

[D,I] = pdist2(___,Name,Value)還返回矩陣。I。矩陣I中的觀測結果的索引。X對應於D.


實例

計算歐氏距離

用三個觀察和兩個變量創建兩個矩陣。

rng('default') % For reproducibility
X = rand(3,2);
Y = rand(3,2);

計算歐氏距離。輸入參數的默認值。Distance'euclidean'。當不使用名稱-值對參數計算歐幾里德距離時,不需要指定Distance.

D = pdist2(X,Y)
D = 3×3

    0.5387    0.8018    0.1538
    0.7100    0.5951    0.3422
    0.8805    0.4242    1.2050

D(i,j)對應於觀察之間的成對距離i在……裏面X和觀察j在……裏面Y.

計算Minkowski距離

用三個觀察和兩個變量創建兩個矩陣。

rng('default') % For reproducibility
X = rand(3,2);
Y = rand(3,2);

用默認指數2計算Minkowski距離。

D1 = pdist2(X,Y,'minkowski')
D1 = 3×3

    0.5387    0.8018    0.1538
    0.7100    0.5951    0.3422
    0.8805    0.4242    1.2050

計算Minkowski距離,其指數爲1,等於城市塊距離。

D2 = pdist2(X,Y,'minkowski',1)
D2 = 3×3

    0.5877    1.0236    0.2000
    0.9598    0.8337    0.3899
    1.0189    0.4800    1.7036

D3 = pdist2(X,Y,'cityblock')
D3 = 3×3

    0.5877    1.0236    0.2000
    0.9598    0.8337    0.3899
    1.0189    0.4800    1.7036

找到兩個最小的成對距離

用三個觀察和兩個變量創建兩個矩陣。

rng('default') % For reproducibility
X = rand(3,2);
Y = rand(3,2);

找到兩個最小的兩兩歐幾里得距離X中的每一次觀察Y.

[D,I] = pdist2(X,Y,'euclidean','Smallest',2)
D = 2×3

    0.5387    0.4242    0.1538
    0.7100    0.5951    0.3422

I = 2×3

     1     3     1
     2     2     2

中的每一次觀察Ypdist2通過計算並將距離值與X。的每個列中的距離排序。D按升序排列。I中的觀測結果的索引。X對應於D.

使用自定義距離函數計算缺少元素的成對距離

定義一個自定義距離函數,該函數忽略NaN值,並使用自定義距離函數計算成對的距離。

用三個觀察和三個變量創建兩個矩陣。

rng('default') % For reproducibility
X = rand(3,3)
Y = [X(:,1:2) rand(3,1)]
X =

    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575


Y =

    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 =

       NaN    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575

計算漢明距離。

D1 = pdist2(X,Y,'hamming')
D1 =

       NaN       NaN       NaN
    1.0000    0.3333    1.0000
    1.0000    1.0000    0.3333

中頻觀測i在……裏面X或觀察j在……裏面YNaN值,函數pdist2回報NaN對於兩兩之間的距離ij。因此,D1(1,1),D1(1,2)和D1(1,3)是NaN價值。

定義自定義距離函數nanhamdist忽略座標的NaN值並計算Hamming距離。當處理大量的觀測時,您可以通過遍歷數據的座標來更快地計算距離。

function D2 = nanhamdist(XI,XJ)  
%NANHAMDIST Hamming distance ignoring coordinates with NaNs
[m,p] = size(XJ);
nesum = zeros(m,1);
pstar = zeros(m,1);
for q = 1:p
    notnan = ~(isnan(XI(q)) | isnan(XJ(:,q)));
    nesum = nesum + ((XI(q) ~= XJ(:,q)) & notnan);
    pstar = pstar + notnan;
end
D2 = nesum./pstar; 

nanhamdist的輸入參數傳遞函數句柄。pdist2.

D2 = pdist2(X,Y,@nanhamdist)
D2 =

    0.5000    1.0000    1.0000
    1.0000    0.3333    1.0000
    1.0000    1.0000    0.3333

向現有集羣分配新數據並生成C/C++代碼

此示例使用:

執行k-均值聚類

使用三個發行版生成培訓數據集。

rng('default') % For reproducibility
X = [randn(100,2)*0.75+ones(100,2);
    randn(100,2)*0.5-ones(100,2);
    randn(100,2)*0.75];

使用kmeans.

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

繪製星系團和星系團質心圖。

figure
gscatter(X(:,1),X(:,2),idx,'bgm')
hold on
plot(C(:,1),C(:,2),'kx')
legend('Cluster 1','Cluster 2','Cluster 3','Cluster Centroid')

將新數據分配給現有集羣

生成測試數據集。

Xtest = [randn(10,2)*0.75+ones(10,2);
    randn(10,2)*0.5-ones(10,2);
    randn(10,2)*0.75];

使用現有集羣對測試數據集進行分類。從每個測試數據點查找最近的質心,使用pdist2.

[~,idx_test] = pdist2(C,Xtest,'euclidean','Smallest',1);

繪製測試數據並使用idx_testgscatter.

gscatter(Xtest(:,1),Xtest(:,2),idx_test,'bgm','ooo')
legend('Cluster 1','Cluster 2','Cluster 3','Cluster Centroid', ...
    'Data classified to Cluster 1','Data classified to Cluster 2', ...
    'Data classified to Cluster 3')

 

輸入參數

X,Y — 輸入數據
數值矩陣

輸入數據,指定爲數字矩陣。XMX-按-n矩陣和Y我的-按-n矩陣。行對應於單獨的觀察,列對應於單個變量。

數據類型:single | double

Distance — 距離度量
字符向量 | 串標量 | 功能手柄

距離度量,指定爲字符向量、字符串標量或函數句柄,如下表所述。

價值 描述
'euclidean'

歐幾里德距離(默認)。

'squaredeuclidean'

平方歐氏距離(本選項僅爲提高效率而提供。它不滿足三角形不等式。

'seuclidean'

標準化歐氏距離觀測值之間的每個座標差除以標準差的對應元素,S = nanstd(X)。使用DistParameter指定另一個值S.

'mahalanobis'

使用樣本協方差的Mahalanobis距離XC = nancov(X)。使用DistParameter指定另一個值C,其中的矩陣C是對稱的正定的。

'cityblock'

城市街區距離。

'minkowski'

明考斯基距離。默認指數爲2。DistParameter指定不同的指數P,在哪裏P是指數的正標量值。

'chebychev'

切比切夫距離(最大座標差)

'cosine'

1減去點間夾角的餘弦(作爲向量處理)。

'correlation'

1減去點之間的樣本相關性(作爲值的序列處理)。

'hamming'

Hamming距離,即不同座標的百分比。

'jaccard'

1減去Jaccard係數,這是不同的非零座標的百分比。

'spearman'

其中一項減去樣本Spearman之間的秩相關性(作爲值的序列處理)。

@distfun

自定義距離函數句柄。距離函數具有以下形式

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
哪裏

 

  • ZI1-按-n包含單一觀測的向量。

  • ZJm2-按-n包含多個觀察的矩陣。distfun必須接受矩陣ZJ任意數量的觀察。

  • D2m2-按-1距離向量,以及D2(k)是觀察之間的距離ZIZJ(k,:).

 

如果數據不稀疏,通常可以使用內置距離而不是函數句柄來更快地計算距離。

有關定義,請參見距離度量.

當你使用'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

名稱值對參數

指定可選的逗號分隔對Name,Value爭論。Name是參數名和Value對應的值。Name必須出現在引號中。可以將多個名稱和值對參數按任何順序指定爲Name1,Value1,...,NameN,ValueN.

例子:任一'Smallest',K'Largest',K。你不能同時使用'Smallest''Largest'.

'Smallest' — 要查找的最小距離數
正整數

要查找的最小距離數,指定爲由'Smallest'以及一個正整數。如果您指定'Smallest',然後pdist2的每一列中的距離排序。D按升序排列。

例子:'Smallest',3

數據類型:single | double

'Largest' — 要查找的最大距離數
正整數

要查找的最大距離數,指定爲由'Largest'以及一個正整數。如果您指定'Largest',然後pdist2的每一列中的距離排序。D按降序排列。

例子:'Largest',3

數據類型:single | double

D-成對距離
數值矩陣

成對距離,返回爲數字矩陣。

如果您沒有指定'Smallest''Largest',然後DMX-按-我的矩陣,其中MX我的中的觀察數XY分別。D(i,j)是觀察之間的距離i在……裏面X和觀察j在……裏面Y。中頻觀測i在……裏面X或觀察j在……裏面YNaN,然後D(i,j)NaN內建距離函數。

如果您指定'Smallest''Largest'K,然後DK-按-我的矩陣。D包含K最小的或最小的K與觀測的最大成對距離X中的每一次觀察Y。中的每一次觀察Ypdist2發現K的最小或最大距離,通過計算和比較的距離值與所有的觀測X。如果K大於MXpdist2返回MX-按-我的矩陣。

I-排序索引
正整數矩陣

排序索引,作爲正整數矩陣返回。I是和DI中的觀測結果的索引。X對應於D.

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章