ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

pdist

観測値ペア間のペアワイズ距離

構文

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 で指定された方式を使用して距離を返します。DistParameter を指定できるのは、Distance'seuclidean''minkowski' または 'mahalanobis' である場合だけです。

すべて折りたたむ

観測値ペア間のユークリッド距離を計算し、squareform を使用して距離ベクトルを行列に変換します。

3 つの観測値と 2 つの変数を使用して行列を作成します。

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) という順序で編成されます。観測値 i および j の間の距離は、squareform を使用すると簡単に求めることができます。

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 の出力 ypdist の出力 D は同じです。

3 つの観測値と 2 つの変数を使用して行列を作成します。

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

既定の指数 2 を使用してミンコフスキー距離を計算します。

D1 = pdist(X,'minkowski')
D1 = 1×3

    0.2954    1.0670    0.9448

指数を 1 にしてミンコフスキー距離を計算します。これは市街地距離に等しくなります。

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 値がある座標を無視するカスタム距離関数を定義し、この関数を使用してペアワイズ距離を計算します。

3 つの観測値と 2 つの変数を使用して行列を作成します。

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

1 番目の観測値の 1 番目の要素が欠損していると仮定します。

X(1,1) = NaN;

ユークリッド距離を計算します。

D1 = pdist(X)
D1 =

       NaN       NaN    0.9448

観測値 i または jNaN 値が含まれている場合、関数 pdistij の間のペアワイズ距離として NaN を返します。したがって、(2,1) と (3,1) のペアワイズ距離である D1(1) および D1(2) は NaN 値になります。

NaN 値がある座標を無視してユークリッド距離を返すカスタム距離関数 naneucdist を定義します。

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

入力引数

すべて折りたたむ

入力データ。m 行 n 列の数値行列を指定します。行は各観測値に、列は各変数に対応します。

データ型: single | double

距離計量。次の表に記載されているように文字ベクトル、string スカラーまたは関数ハンドルを指定します。

説明
'euclidean'

ユークリッド距離 (既定の設定)。

'squaredeuclidean'

2 乗ユークリッド距離(効率向上のみを目的に提供されているオプション。三角不等式は満たさない)。

'seuclidean'

標準化されたユークリッド距離。観測値間の各座標差は、標準偏差 S = nanstd(X) の対応する要素で除算することによりスケーリングされます。S について別の値を指定するには、DistParameter を使用します。

'mahalanobis'

X の標本共分散を使用したマハラノビス距離、C = nancov(X)C について別の値を指定するには、DistParameter を使用します。ここで、行列 C は対称かつ正定です。

'cityblock'

市街地距離。

'minkowski'

ミンコフスキー距離。指数の既定値は 2 です。異なる指数 P を指定するには、DistParameter を使用します。P は指数を表す正のスカラー値です。

'chebychev'

チェビシェフ距離 (最大座標差)。

'cosine'

1 から、ベクトルとして扱われる点の間の夾角の余弦を引いた値。

'correlation'

1 から、値の系列として扱われる点の間の標本相関を引いた値。

'hamming'

異なる座標の比率を示すハミング距離。

'jaccard'

1 から、ジャカード係数 (異なる非ゼロ座標の比率) を引いた値。

'spearman'

1 から、観測値間の標本スピアマンの順位相関 (値の系列として扱われる) を引いた値。

@distfun

カスタム距離関数のハンドル。距離関数の形式は次のようになります。

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
ここで、

  • ZI は、単一の観測値が含まれている 1n 列のベクトルです。

  • ZJ は、複数の観測値が含まれている m2n 列の行列です。distfun は、任意の個数の観測値が含まれている行列 ZJ を受け入れなければなりません。

  • D2m21 列の距離のベクトルであり、D2(k) は観測値 ZIZJ(k,:) の間の距離です。

データがスパースでない場合、通常は関数ハンドルではなく組み込みの距離を使用する方が高速に距離を計算できます。

定義については距離計量を参照してください。

'seuclidean''minkowski' または 'mahalanobis' を使用する場合、これらの尺度を制御する追加入力引数 DistParameter を指定できます。DistParameter を既定値にすると、これらの尺度を他の尺度と同じ方法で使用できます。

例: 'minkowski'

距離計量のパラメーター値。正のスカラー、数値ベクトルまたは数値行列を指定します。この引数は、Distance として 'seuclidean''minkowski' または 'mahalanobis' を指定した場合のみ有効です。

  • Distance'seuclidean' の場合、DistParameter は各次元のスケーリング係数のベクトルで、正のベクトルを指定します。既定値は nanstd(X) です。

  • Distance'minkowski' の場合、DistParameter はミンコフスキー距離の指数で、正のスカラーを指定します。既定値は 2 です。

  • Distance'mahalanobis' の場合、DistParameter は共分散行列で、数値行列を指定します。既定値は nancov(X) です。DistParameter は、対称正定行列でなければなりません。

例: 'minkowski',3

データ型: single | double

出力引数

すべて折りたたむ

ペアワイズ距離。観測値のペアに対応する、長さ m(m–1)/2 の数値行ベクトルとして返されます。m は X 内の観測値の個数です。

距離は、(2,1)、(3,1)、...、(m,1)、(3,2)、...、(m,2)、...、(m,m-1) という順序で編成されます。つまり、m 行 m 列の距離行列の左下三角の列順になります。観測値 i および j の間のペアワイズ距離は、i ≤ j について D((i-1)*(m-i/2)+j-i) にあります。

関数 squareform を使用すると、D を対称行列に変換できます。Z = squareform(D) は、Z(i,j) が観測値 i および j の間のペアワイズ距離に対応する、m 行 m 列の行列を返します。

観測値 i または j に NaN が含まれている場合、組み込み距離関数では D 内の対応する値が NaN になります。

通常、D はクラスタリングまたは多次元尺度構成法で非類似度行列として使用されます。詳細については、階層クラスタリングと、関数 cmdscalecophenetlinkagemdscale および optimalleaforder のリファレンス ページを参照してください。これらの関数は入力引数として D を受け入れます。

詳細

すべて折りたたむ

距離計量

距離計量は、2 つの観測値の間の距離を定義する関数です。pdist は、以下の各種距離計量、ユークリッド距離、標準化されたユークリッド距離、マハラノビス距離、市街地距離、ミンコフスキー距離、チェビシェフ距離、コサイン距離、相関距離、ハミング距離、Jaccard 距離およびスピアマン距離をサポートします。

m 個の (1 行 n 列の) 行ベクトル x1、x2、...、xm として扱われる m 行 n 列のデータ行列 X に対して、ベクトル xs と xt の間で各種の距離は次のように定義されます。

  • ユークリッド距離

    dst2=(xsxt)(xsxt).

    ユークリッド距離はミンコフスキー距離の特殊なケース、p = 2 の場合です。

  • 標準化されたユークリッド距離

    dst2=(xsxt)V1(xsxt),

    ここで、V は j 番目の対角要素が (S(j))2 である n 行 n 列の対角行列です。S は各次元のスケーリング係数のベクトルです。

  • マハラノビス距離

    dst2=(xsxt)C1(xsxt),

    ここで、C は共分散行列です。

  • 市街地距離

    dst=j=1n|xsjxtj|.

    市街地距離はミンコフスキー距離の特殊なケース、p = 1 の場合です。

  • ミンコフスキー距離

    dst=j=1n|xsjxtj|pp.

    p = 1 という特殊なケースでは、ミンコフスキー距離は市街地距離を与えます。p = 2 という特殊なケースでは、ミンコフスキー距離はユークリッド距離を与えます。p = ∞ という特殊なケースでは、ミンコフスキー距離はチェビシェフ距離を与えます。

  • チェビシェフ距離

    dst=maxj{|xsjxtj|}.

    チェビシェフ距離はミンコフスキー距離の特殊なケース、p = ∞ の場合です。

  • コサイン距離

    dst=1xsxt(xsxs)(xtxt).

  • 相関距離

    dst=1(xsx¯s)(xtx¯t)(xsx¯s)(xsx¯s)(xtx¯t)(xtx¯t),

    ここで、

    x¯s=1njxsj および x¯t=1njxtj です。

  • ハミング距離

    dst=(#(xsjxtj)/n).

  • Jaccard 距離

    dst=#[(xsjxtj)((xsj0)(xtj0))]#[(xsj0)(xtj0)].

  • スピアマン距離

    dst=1(rsr¯s)(rtr¯t)(rsr¯s)(rsr¯s)(rtr¯t)(rtr¯t),

    ここで、

    • rsj は、tiedrank により計算される、x1j、x2j、... xmj から取得された xsj の順位です。

    • rs および rt は、xs および xt の座標単位の順位ベクトルです。つまり、rs = (rs1, rs2, ... rsn) です。

    • r¯s=1njrsj=(n+1)2

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

拡張機能

R2006a より前に導入