メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

mdscale

非古典的多次元尺度構成法

説明

Y = mdscale(D,p) は、nn 列の非類似度行列 D に対して非計量多次元尺度構成法を実行し、np 列の構成行列を返します。Y の行は p 次元空間の n 個の点の座標に対応します。Y の点間のユークリッド距離は、D の対応する非類似度の単調変換を近似します。既定では、mdscale はクラスカルの正規化されたストレス式 1 の基準を使用します。計量多次元尺度構成法を実行するには、名前と値の引数Criterionを指定します。

Y = mdscale(___,Name=Value) は、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、非類似度の重みや最小化する適合度基準を指定できます。

[Y,stress]= mdscale(___) は、最小化されたストレスを追加で返します。これは、Y で評価されるストレスです。

[Y,stress,disparities]= mdscale(___) は、格差を追加で返します。これは、D の非類似度の単調変換です。

すべて折りたたむ

同じデータ セットで非計量多次元尺度構成法と計量多次元尺度構成法を実行します。

77 種類のシリアルの栄養情報が格納された cereal データ セットを読み込みます。

load cereal

単一の製造元のシリアルの選択した測定値で構成されるデータのサブセットを取得します。

X = [Calories,Protein,Fat,Sodium,Fiber, ...
    Carbo,Sugars,Shelf,Potass,Vitamins];
X = X(strcmp("K",cellstr(Mfg)),:);
size(X)
ans = 1×2

    23    10

X には 23 個の観測値と 10 個の予測子変数が含まれています。

pdist 関数を使用して非類似度行列を作成します。

dissimilarities = pdist(X)
dissimilarities = 1×253

  122.2784  322.6329  288.6226  347.3615  204.0662  295.9206  322.6050  303.9539  342.0409  141.1241  288.2603  263.6001  214.4808  293.1996  206.9734  248.1290  293.2388  107.3126  334.9910  289.9034  340.9883  269.9685  306.9267  335.2238  320.2312  180.7291  316.7823  306.8843  317.1183  274.2408  186.4457  288.6451  264.9925  203.6566  303.0380  234.1880  245.6135  349.3895  134.7739  264.2593  336.9481  304.9607  295.9307  166.1174   36.5240  131.1297   96.1613    1.4142   75.2994  143.8332

size(squareform(dissimilarities))
ans = 1×2

    23    23

dissimilarities は、非類似度行列の 253 個の上三角要素を含む 23 行 23 列のサイズの行ベクトルになります。

非計量多次元尺度構成法を使用してデータを 2 次元で再作成します。

[Y,~,disparities] = mdscale(dissimilarities,2);
distances = pdist(Y);

Shepard プロットを使用して結果を可視化します。

[~,ord] = sortrows([disparities(:),dissimilarities(:)]);
plot(dissimilarities,distances,"o", ...
    dissimilarities(ord),disparities(ord),".-");
axis square
xlim([0 max(dissimilarities)]);
ylim([0 max(dissimilarities)]);
xlabel("Dissimilarities")
ylabel("Distances/Disparities")
legend(["Distances","Disparities"],Location="northwest");

Figure contains an axes object. The axes object with xlabel Dissimilarities, ylabel Distances/Disparities contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Distances, Disparities.

青い円の x 座標はそれらの元の非類似度の値に対応し、y 座標はそれらの 2 次元空間でのユークリッド距離に対応します。ほとんどの点が 1:1 線の近くにあり、2 次元尺度構成法によって、それよりも高次元の非類似度のある程度適切な表現が得られることを示しています。連結された赤い点は格差の値を示します。これは、非類似度の単調変換です。

同じ非類似度で metricsstress の基準を使用して計量多次元尺度構成法を実行します。

[Y,stress] = mdscale(dissimilarities,2,Criterion="metricsstress");
distances = pdist(Y);

Shepard プロットを使用して結果を可視化します。計量多次元尺度構成法には非類似度がないため、赤い 1:1 線をプロットします。

plot(dissimilarities,distances,"o", ...
    [0 max(dissimilarities)],[0 max(dissimilarities)],".-")
%xlim([0 max(dissimilarities)]);
axis square;
xlim([0 max(dissimilarities)]);
ylim([0 max(dissimilarities)]);
xlabel("Dissimilarities")
ylabel("Distances")

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

ほとんどの点が 1:1 線の非常に近くにあり、2 次元尺度構成法によって、それよりも高次元の非類似度の適切な表現が得られることを示しています。

この例では、mdscale を使用して非計量多次元尺度構成法を実行する方法を示します。

計量多次元尺度構成法 (MDS) は、その点間の距離が与えられた非類似度を近似するように点の構成を作成します。これは要件が厳しすぎることがあり、非計量多次元尺度構成法はそれより厳しくない代替方法となります。非計量多次元尺度構成法では、非類似度自身を近似せずに、非類似度を、非線形であっても単調になるように変換してから近似します。単調性があるので、出力のプロットの距離が大きい (小さい) ほど、より大きい (小さい) 非類似度に相当します。ただし、非線形性は mdscale が非類似度の順序の保存のみを試みることを意味します。したがって、異なる尺度での、距離の縮小または拡大があるかもしれません。

cereal データ セットを読み込みます。これには、77 種類の朝食のシリアルについて記述する 10 個の変数の測定値が含まれています。

rng(0,"twister"); % For reproducibility
load cereal

単一の製造元のシリアルの選択した測定値で構成されるデータのサブセットを取得します。

X = [Calories Protein Fat Sodium Fiber ... 
    Carbo Sugars Shelf Potass Vitamins];
X = X(strcmp("G",cellstr(Mfg)),:);
size(X)
ans = 1×2

    22    10

X には 22 個の観測値と 10 個の予測子変数が含まれています。

pdistを使用して 10 次元のデータを非類似度に変換します。最初にシリアルのデータを標準化し、市街地距離を非類似度として使用します。

dissimilarities = pdist(zscore(X),'cityblock');
size(dissimilarities)
ans = 1×2

     1   231

pdist からの出力は対称な非類似度行列であり、(22*21/2) 個の要素を上三角にのみ含むベクトルとして格納されます。非類似度への変換の選択は目的に依存します。ここでは簡単にするためだけに行っています。目的によっては、元のデータが既に非類似度の形式である場合があります。

mdscale を使用して、クラスカルのストレス式 1 のモデルで非計量多次元尺度構成法を実行します。

[Y,stress,disparities] = mdscale(dissimilarities,2,Criterion="stress");
stress
stress = 
0.1562

非計量的 stress 基準は、出力を計算するための一般的な方法です。他の選択肢については、オンライン ドキュメンテーションの mdscale のリファレンス ページを参照してください。mdscale からの 2 番目の出力は、出力の配置の評価に使われた基準の値です。出力構成の点間の距離が格差をどの程度近似するかを示す尺度になります。3 番目の出力には、格差が返されます。これらは、元の非類似度を単調変換した値です。

それらのデータを可視化して、非類似度に対する出力構成の適合性を確認し、格差を理解します。

distances = pdist(Y);
[dum,ord] = sortrows([disparities(:) dissimilarities(:)]);
plot(dissimilarities,distances,"bo",dissimilarities(ord),...
     disparities(ord),"r.-",[0 25],[0 25],"k--")
axis square;
xlabel("Dissimilarities")
ylabel("Distances/Disparities")
legend({"Distances" "Disparities" "1:1 Line"},...
       "Location","NorthWest");

Figure contains an axes object. The axes object with xlabel Dissimilarities, ylabel Distances/Disparities contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Distances, Disparities, 1:1 Line.

mdscale は、点間の距離が格差を近似する 2 次元の点の構成を見つけます。これは、元の非類似度の非線形変換と言えます。この不一致が非類似度の関数として格差の凹形状であることは、近似によって、対応する非類似度に比べて点間の間隔が少し縮められる傾向にあることを示します。これは、実際には十分に許容可能と思われます。

mdscale は、反復アルゴリズムを使用して出力の配置を見つけます。その結果は、しばしば開始点に依存することがあります。既定では、mdscalecmdscaleを使用して初期構成を作成し、この選択によって多くの場合はグローバルな最適解が得られます。しかし、mdscale は、基準のローカルな最小値となる構成を返すこともあります。このような場合は、別の開始点を使って mdscale を複数回実行することになります。これは、名前と値の引数 Start および Replicates を使用して行うことができます。

スケーリングを繰り返します。今回は MDS の 5 つの複製を使用し、それぞれを無作為に選択された異なる初期構成で始めます。mdscale は、各反復の最終的なストレスの基準を表示し、最も良く適合する構成を返します。

[Y,stress] = mdscale(dissimilarities,2,Criterion="stress",...  
         Start="random",Replicates=5, ...
         Options=statset(Display="final"));
35 iterations, Final stress criterion = 0.156209
31 iterations, Final stress criterion = 0.156209
48 iterations, Final stress criterion = 0.171209
33 iterations, Final stress criterion = 0.175341
32 iterations, Final stress criterion = 0.185881

mdscale は、いくつかの異なるローカル解を探すことに注意してください。これらのいくつかは、cmdscale の開始点として見つけられた解ほど低い stress の値をもちません。

入力引数

すべて折りたたむ

n 個の点の非類似度行列。nn 列の数値行列として指定します。D は、非類似度行列の n*(n-1)/2 個の上三角要素を含む 1 行 k 列の数値行ベクトルとして指定することもできます。この場合、Dsquareform 関数を使用して正方行列に変換されます。NaN は欠損値として扱われて無視されます。D に負の値または Inf 値を含めることはできず、行列タイプは次のいずれかでなければなりません。

行列タイプ対称説明
完全非類似度あり

対角要素がゼロで、非対角要素は非負の非類似度値

完全非類似度 (上三角形式)なし対角の上側が非負の非類似度値で、それ以外はゼロ
完全類似度あり
  • 対角要素が 1 で、非対角要素は 1 より小さい非負の値

  • mdscaleY の点間の距離が sqrt(1–D) に等しいかまたは近くなるように、類似度行列を非類似度行列に変換します。別の変換を使用するには、mdscale の呼び出しの前に類似度行列を変換します。

データ型: single | double

目的の埋め込みの次元。1 ~ n の整数として指定します。ここで、nD の点の数です。p=[] を指定する場合、Startnk 列の行列として指定しなければなりません。この場合、p=k が設定されます。

データ型: single | double

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: mdscale(D,2,Criterion="sammon")

最小化する適合度基準。次の表の値のいずれかとして指定します。この引数により、mdscale で実行されるスケーリングのタイプも決まります。計量多次元尺度構成法では、Y の点間の距離は D の非類似度を近似します。非計量多次元尺度構成法では、Y の点間の距離は disparities を近似します。これは、D の非類似度の単調変換です。

スケーリングのタイプ説明
"stress" (既定の設定)非計量 クラスカルのストレス式 1 [4]としても知られる点間距離の二乗和により正規化されるストレス
"sstress"非計量点間距離の 4 乗和により正規化される 2 乗ストレス。この基準は、点間の大きな差異に対してストレス式 1 よりも敏感になります。
"metricstress"メトリクス非類似度の二乗和により正規化されるストレス
"metricsstress"メトリクス非類似度の 4 乗和により正規化される 2 乗ストレス
"sammon"メトリクスSammon の非線形マッピング基準。すべての距離を同等に扱うクラスカルのストレス式 1 と異なり、Sammon の基準では短い距離を保持することが重視されます。これにより、アルゴリズムの計算量が増加し、収束が遅くなることがあります[5]
"strain"メトリクス古典的多次元尺度構成法で使われるものと同じ基準

例: Criterion="sstress"

データ型: char | string

非類似度の重み。非負の値の nn 列の対称数値行列、または非負の値の 1 行 n*(n-1)/2 列の数値ベクトルとして指定します。ここで、nD の点の数です。Weights のサイズは D と同じでなければなりません。mdscale はストレスを計算して最小化するときに、D の要素に Weights の対応する値で重みを付けます。対応する重み値がゼロの D の要素は、いずれも実質的に無視されます。

メモ

重みを完全な行列で指定した場合、D の対応する対角要素がストレス計算に入らないため、対角要素は無視され、影響がありません。

データ型: single | double

Y の点の初期構成を選択する方法。次の表の値のいずれかとして指定します。

説明
"cmdscale" (既定の設定)cmdscale 関数を使用して古典的多次元尺度構成法の初期構成が作成されます。この値は、Weights を指定していて、少なくとも 1 つの重み値がゼロの場合は有効ではありません。
"random"無相関座標を使用して適切にスケーリングされた p 次元の正規分布から点の位置が無作為に選択されます。
数値行列初期位置の "n"p 列の行列。ここで、n は D の点の数です。この場合、p=[] を指定していていると、行列の 2 番目の次元から p が推定されます。Start は複数の初期構成を含む 3 次元配列として指定することもできます。この場合、Replicates を指定していないと、Replicates は配列の 3 番目の次元のサイズに設定されます。

ヒント

ローカルな最小値しか解が見つからない可能性を低減するには、mdscale の実行を異なる開始点で複数回試し、より大きい Replicates の値を指定します。

例: Start="random"

データ型: char | string | single | double

スケーリングを繰り返す回数。非負の整数として指定します。Start を指定しない場合、Replicates=1 が設定されます。Start を 3 次元配列として指定する場合、次のようになります。

  • Replicates は配列の 3 番目の次元のサイズと等しくなければなりません。

  • Replicates を指定していない場合、Replicates は配列の 3 番目の次元のサイズに設定されます。

mdscale は、各反復で新しい初期構成を使用します。この引数を指定することで、mdscale でローカルな最小値しか解が見つからない可能性を低減できます。

例: Replicates=3

データ型: single | double

反復的な当てはめの基準最小化アルゴリズムのオプション。構造体として指定します。statset を使用して Options 構造体を作成します。次の表は、オプションのフィールドとその値の一覧です。

フィールド名既定の設定
Display

表示する情報量。次のいずれかとして指定します。

  • "off" — 情報なし

  • "iter" — 反復出力

  • "final" — 最終出力のみ

"off"
MaxIter最大反復回数。正の整数を指定します。200
TolFunストレスの基準および勾配に対する終了許容誤差。正のスカラー値として指定します。1e-4
TolX構成の位置のステップ サイズに対する終了許容誤差。正のスカラー値として指定します。1e-4

例: Options=statset(Display="final", MaxIter=10)

データ型: struct

出力引数

すべて折りたたむ

nn 列の行列 D の構成行列。np 列の数値行列として返されます。Y の行は p 次元空間の n 個の点の座標に対応します。stress の値が最小になる構成行列を見つけるように試行されます。

Y で評価されるストレス。数値スカラーとして返されます。非計量多次元尺度構成法 (既定の設定) の場合、ストレスの値は、出力構成行列 Y の点間の距離がdisparitiesをどの程度近似するかを示す尺度です。計量多次元尺度構成法の場合、ストレスの値は、出力構成行列の点間の距離が入力の非類似度 D をどの程度近似するかを示す尺度です。

格差。D と同じサイズの数値行列として返されます。非計量多次元尺度構成法の場合、格差は D の非類似度を単調変換した値です。計量多次元尺度構成法の場合、格差はなく、mdscaleD を返します。

参照

[1] Cox, Trevor F., and Michael A. A. Cox. Multidimensional Scaling. 2nd ed. Monographs on Statistics and Applied Probability 88. Boca Raton: Chapman & Hall/CRC, 2001.

[2] Davison, Mark L. Multidimensional Scaling. Wiley Series in Probability and Mathematical Statistics. New York: Wiley, 1983.

[3] Kruskal, J. B. “Multidimensional Scaling by Optimizing Goodness of Fit to a Nonmetric Hypothesis.” Psychometrika 29, no. 1 (March 1964): 1–27.

[4] Kruskal, J. B. “Nonmetric Multidimensional Scaling: A Numerical Method.” Psychometrika 29, no. 2 (June 1964): 115–29. https://doi.org/10.1007/BF02289694.

[5] Sammon, J.W. “A Nonlinear Mapping for Data Structure Analysis.” IEEE Transactions on Computers C–18, no. 5 (May 1969): 401–9.

[6] Seber, G. A. F. Multivariate Observations. 1st ed. Wiley Series in Probability and Statistics. Wiley, 1984.

バージョン履歴

R2006a より前に導入