pdist2
兩組觀測之間的成對距離
句法
D = pdist2(X,Y,Distance,DistParameter)
[D,I] = pdist2(___,Name,Value)
描述
中的每一對觀測之間的距離。D
= pdist2(X,Y
,Distance
)X
和Y
使用Distance
.
指定的度量返回距離。D
= pdist2(X,Y
,Distance
,DistParameter
)Distance
和DistParameter
。您可以指定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)
指定的度量計算距離。Distance
和DistParameter
並返回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
中的每一次觀察Y
, pdist2
通過計算並將距離值與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
在……裏面Y
含NaN
值,函數pdist2
回報NaN
對於兩兩之間的距離i
和j
。因此,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_test
用gscatter
.
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
— 輸入數據
數值矩陣
輸入數據,指定爲數字矩陣。X
是MX-按-n矩陣和Y
是我的-按-n矩陣。行對應於單獨的觀察,列對應於單個變量。
數據類型:single
| double
Distance
— 距離度量
字符向量 | 串標量 | 功能手柄
距離度量,指定爲字符向量、字符串標量或函數句柄,如下表所述。
價值 | 描述 |
---|---|
'euclidean' |
歐幾里德距離(默認)。 |
'squaredeuclidean' |
平方歐氏距離(本選項僅爲提高效率而提供。它不滿足三角形不等式。 |
'seuclidean' |
標準化歐氏距離觀測值之間的每個座標差除以標準差的對應元素, |
'mahalanobis' |
使用樣本協方差的Mahalanobis距離 |
'cityblock' |
城市街區距離。 |
'minkowski' |
明考斯基距離。默認指數爲2。 |
'chebychev' |
切比切夫距離(最大座標差) |
'cosine' |
1減去點間夾角的餘弦(作爲向量處理)。 |
'correlation' |
1減去點之間的樣本相關性(作爲值的序列處理)。 |
'hamming' |
Hamming距離,即不同座標的百分比。 |
'jaccard' |
1減去Jaccard係數,這是不同的非零座標的百分比。 |
'spearman' |
其中一項減去樣本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
名稱值對參數
指定可選的逗號分隔對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'
,然後D
是MX-按-我的矩陣,其中MX和我的中的觀察數X
和Y
分別。D(i,j)
是觀察之間的距離i
在……裏面X
和觀察j
在……裏面Y
。中頻觀測i在……裏面X
或觀察j在……裏面Y
含NaN
,然後D(i,j)
是NaN
內建距離函數。
如果您指定'Smallest'
或'Largest'
如K
,然後D
是K
-按-我的矩陣。D
包含K
最小的或最小的K
與觀測的最大成對距離X
中的每一次觀察Y
。中的每一次觀察Y
, pdist2
發現K
的最小或最大距離,通過計算和比較的距離值與所有的觀測X
。如果K
大於MX, pdist2
返回MX-按-我的矩陣。
I
-排序索引
正整數矩陣
排序索引,作爲正整數矩陣返回。I
是和D
. I
中的觀測結果的索引。X
對應於D
.