ドキュメンテーション

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

pdist

オブジェクトのペアワイズ距離

構文

D = pdist(X)
D = pdist(X,distance)

説明

D = pdist(X) は、m 行 n 列のデータ行列 X のオブジェクトのペア間のユークリッド距離を計算します。X の行は観測値に対応し、列は変数に対応しています。D は、X の観測値のペアに対応している長さ m(m–1)/2 の行ベクトルです。距離は (2,1), (3,1), ..., (m,1), (3,2), ..., (m,2), ..., (m,m–1)) の順序で配置されています。D は、クラスタリングまたは多次元スケーリングにおいて非類似度行列として一般的に使用されます。

スペースと計算時間を節約するために、D はベクトルとして書式設定されています。ただし、このベクトルは関数 squareform を使用して正方行列に変換し、行列の要素 i、j (i < j) を元のデータセット内の i オブジェクトと j オブジェクト間の距離に対応させることができます。

D = pdist(X,distance) は、次の文字列のいずれかである distance によって指定されているメソッドを使用して、データ行列 X のオブジェクト間の距離を計算します。

計量説明
'euclidean'

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

'squaredeuclidean'

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

'seuclidean'

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

'cityblock'

市街地距離。

'minkowski'

ミンコフスキー距離。既定の指数は 2 です。異なる指数を指定するには、<command moreinfo="none">D = pdist(X,'minkowski',P) を使用します。ここで、P は指数を表す正のスカラー値です。

'chebychev'

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

'mahalanobis'

nancov によって計算される、X の標本共分散を使用したマハラノビス距離。別の共分散をもつ距離を計算するには、D = pdist(X,'mahalanobis',C) を使用します。ここで、行列 C は対称正定です。

'cosine'

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

'correlation'

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

'spearman'

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

'hamming'

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

'jaccard'

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

カスタム距離関数

@ を使用して指定する距離関数。
D = pdist(X,@distfun)

距離関数の形式は

d2 = distfun(XI,XJ)
でなければなりません。引数は、1 行の X に対応している 1 行 n 列のベクトル XI と、複数行の X に対応している m2 行 n 列の行列 XJ です。distfun は任意の行数をもつ行列 XJ を受け入れなければなりません。distfun は距離 d2 の m2 行 1 列のベクトルを返さなければなりません。ここで、k 番目の要素は XIXJ(k,:) 間の距離です。

出力 D は ((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) の式を使用するか、補助関数 Z = squareform(D) を使用します。この関数は、(i,j) エントリが観測値 i と観測値 j 間の距離に等しい m 行 m 列の対称正方行列を返します。

距離

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)

  • ジャカード距離

    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

次の 2 つの方法を使用して、乱数データを生成し、重み付けのないユークリッド距離を求め、次に重み付きの距離を求めます。

% Compute the ordinary Euclidean distance.
X = randn(100, 5);
D = pdist(X,'euclidean');  % euclidean distance
 
% Compute the Euclidean distance with each coordinate
% difference scaled by the standard deviation.
Dstd = pdist(X,'seuclidean');
 
% Use a function handle to compute a distance that weights
% each coordinate contribution differently.
Wgts = [.1 .3 .3 .2 .1];     % coordinate weights
weuc = @(XI,XJ,W)(sqrt(bsxfun(@minus,XI,XJ).^2 * W'));
Dwgt = pdist(X, @(Xi,Xj) weuc(Xi,Xj,Wgts));

R2006a より前に導入

この情報は役に立ちましたか?