Main Content

cmdscale

古典的多次元尺度構成法

構文

Y = cmdscale(D)
[Y,e] = cmdscale(D)
[Y,e] = cmdscale(D,p)

説明

Y = cmdscale(D) は、nn 列の距離行列 D を受け入れ、np 列の構成行列 Y を返します。Y の行は p 次元空間の n 個の点の座標で、p < n の場合もあります。D がユークリッド距離の場合、点間の距離は D で与えられます。p は最小空間の次元で、この最小空間に点間距離が D で与えられる n 個の点を組み込むことができます。

[Y,e] = cmdscale(D)Y*Y' の固定値も返します。D がユークリッドの場合、e の最初の p 個の要素は正で、残りはゼロです。e の最初の k 個の要素が残りの (n-k) よりさらに大きい場合、Y の最初の k 個の列を、その点間距離が D の近似になる k 次元の点として扱うことができます。これによって可視化のために有効に次元を削減し、たとえば k = 2 にすることもできます。

D はユークリッド距離行列である必要はありません。これがユークリッドではない、またはより一般的な非類似度行列の場合は、e の要素には負になるものもあり、cmdscalep を正の固有値の数として選択します。この場合、p へ低減する、または次元数を削減することは、e の負の要素の絶対値が小さい場合に限り、D の合理的な近似になります。

[Y,e] = cmdscale(D,p) は、1 ~ n の範囲にある正の整数 p も受け入れます。p では、埋め込む Y の次元を指定します。p 次元の埋め込みが可能である場合、Y のサイズは np 列に、e のサイズは p 行 1 列になります。q < p である q 次元の埋め込みのみが可能である場合、Y のサイズは nq 列に、e のサイズは p 行 1 列になります。n が非常に大きい場合に p を指定すると、計算負荷が軽減される可能性があります。

D は、完全非類似度行列として、または pdist で出力されるような上三角ベクトル形式で指定することができます。完全非類似度行列は、実数、対称で、対角成分がゼロで、その他の要素がすべて正値でなければなりません。上三角形式の非類似度行列の要素は、実数で、正値でなけれなりません。D を対角成分が 1、その他の成分が 1 より小さい要素の完全類似度行列として指定することもできます。cmdscaleY に返される点間の距離が sqrt(1-D) に等しいかまたは近くなるように、類似度行列を非類似度行列に変換します。別の変換を使用する場合は、cmdscale の呼び出しの前に類似度を変換しなければなりません。

すべて折りたたむ

この例では、cmdscale を使用して、米国の 10 都市間の距離に基づく地図を作成する方法を示します。

最初に、距離行列を作成し、cmdscale に渡します。この例では、D は、完全な距離行列です。すなわち、これは、対称な正方行列であり、非対角要素が正で、対角要素はゼロです。

cities = ...
{'Atl','Chi','Den','Hou','LA','Mia','NYC','SF','Sea','WDC'};
D = [    0  587 1212  701 1936  604  748 2139 2182   543;
       587    0  920  940 1745 1188  713 1858 1737   597;
      1212  920    0  879  831 1726 1631  949 1021  1494;
       701  940  879    0 1374  968 1420 1645 1891  1220;
      1936 1745  831 1374    0 2339 2451  347  959  2300;
       604 1188 1726  968 2339    0 1092 2594 2734   923;
       748  713 1631 1420 2451 1092    0 2571 2408   205;
      2139 1858  949 1645  347 2594 2571    0  678  2442;
      2182 1737 1021 1891  959 2734 2408  678    0  2329;
       543  597 1494 1220 2300  923  205 2442 2329     0];
[Y,eigvals] = cmdscale(D);

次に、cmdscale によって返された固有値を見てください。これらのうちのいくつかは負で、オリジナルの距離がユークリッドではないことを示します。これは、地球の曲率のためです。

format short g
[eigvals eigvals/max(abs(eigvals))]
ans = 10×2

   9.5821e+06            1
   1.6868e+06      0.17604
       8157.3    0.0008513
       1432.9   0.00014954
       508.67   5.3085e-05
       25.143    2.624e-06
   4.6482e-10   4.8509e-17
       -897.7  -9.3685e-05
      -5467.6   -0.0005706
       -35479   -0.0037026

しかし、この場合、2 つの最大の正の固有値は、大きさにおいて、残りの固有値よりはるかに大きいです。したがって、負の固有値があるにもかかわらず、Y の最初の 2 つの座標は D の合理的な再生に十分です。

Dtriu = D(find(tril(ones(10),-1)))';
maxrelerr = max(abs(Dtriu-pdist(Y(:,1:2))))./max(Dtriu)
maxrelerr = 
    0.0075371

ここに、地図として再構成された都市の位置のプロットがあります。構成の方位は任意です。

plot(Y(:,1),Y(:,2),'.')
text(Y(:,1)+25,Y(:,2),cities)
xlabel('Miles')
ylabel('Miles')

Figure contains an axes object. The axes object with xlabel Miles, ylabel Miles contains 11 objects of type line, text. One or more of the lines displays its values using only markers

異なる尺度を使用することにより距離に対して点を次元削減すると再構成の品質がどのように変化するかを調べます。

3 次元空間に近い 4 次元空間の点を 10 個生成します。座標軸には沿っていない 3 次元部分空間に変換後の値が近づくように、点を線形変換します。

rng default   % Set the seed for reproducibility
A = [normrnd(0,1,10,3) normrnd(0,0.1,10,1)];
B = randn(4,4);
X = A*B;

ユークリッド尺度を使用して、距離に対して X 内の点を次元削減します。点間の距離を使用して、構成 Y を求めます。

D = pdist(X,'euclidean');
Y = cmdscale(D);

2、3 または 4 次元を使用した場合について、再構成の品質を比較します。maxerr3 の値が小さいので、はじめの 3 つの次元により適切な再構成が行われることがわかります。

maxerr2 = max(abs(pdist(X)-pdist(Y(:,1:2)))) 
maxerr2 = 0.1631
maxerr3 = max(abs(pdist(X)-pdist(Y(:,1:3)))) 
maxerr3 = 0.0187
maxerr4 = max(abs(pdist(X)-pdist(Y)))
maxerr4 = 9.6589e-15

'cityblock' 尺度を使用して、距離に対して X 内の点を次元削減します。点間の距離を使用して、構成 Y を求めます。

D = pdist(X,'cityblock');
[Y,e] = cmdscale(D);

再構成の品質を評価します。e には大きい絶対値の負の要素が少なくとも 1 つ含まれているので、再構成の品質は低い可能性があります。

maxerr = max(abs(pdist(X)-pdist(Y)))
maxerr = 9.0488
min(e)
ans = -5.6586

参考文献

[1] Seber, G. A. F. Multivariate Observations. Hoboken, NJ: John Wiley & Sons, Inc., 1984.

バージョン履歴

R2006a より前に導入