cmdscale

Классическое многомерное масштабирование

Синтаксис

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

Описание

Y = cmdscale(D) берет n- n матрица расстояния D, и возвращает n- p матрица настройки Y. Строки Y координаты n точки в p- мерное пространство для некоторого p < n. Когда D Евклидова матрица расстояния, расстояния между теми точками даны DP размерность самого маленького пробела в который n точки, чьи разделяют расстояния знаками препинания, даны D может быть встроен.

[Y,e] = cmdscale(D) также возвращает собственные значения Y*Y'. Когда D является Евклидовым, первый p элементы e положительны, остальные обнуляют. Если первый k элементы e намного больше, чем остающийся (n-k), затем можно использовать первый k столбцы Y как k- размерные точки, чьи разделяют расстояния знаками препинания, аппроксимируют D. Это может обеспечить полезное сокращение размерности для визуализации, например, для k = 2.

D не должна быть Евклидова матрица расстояния. Если это является неэвклидовым или более общая матрица несходства, то некоторые элементы e отрицательны, и cmdscale выбирает p как количество положительных собственных значений. В этом случае, сокращение к p или меньше размерностей предоставляет разумное приближение D только если отрицательные элементы e малы в величине.

[Y,e] = cmdscale(D,p) также принимает положительный целочисленный p между 1 и nP задает размерность желаемого встраивания Y. Если p размерное встраивание возможно, затем Y будет иметь размер n- p и e будет иметь размер p- 1. Если только q размерное встраивание с q < p возможно, затем Y будет иметь размер n- q и e будет иметь размер p- 1. Определение p может уменьшать вычислительную нагрузку когда n является очень большим.

Можно задать D или как полная матрица несходства, или в верхней треугольной векторной форме той, которая выводится pdist. Полная матрица несходства должна быть действительной и симметричной, и еще иметь нули вдоль диагональных и положительных элементов везде. Матрица несходства в верхней треугольной форме должна иметь действительные, положительные записи. Можно также задать D как полная матрица подобия, с единицами по диагонали и всем другим элементам меньше чем один. cmdscale преобразовывает матрицу подобия к матрице несходства таким способом который расстояния между точками, возвращенными в Y равняйтесь или аппроксимированный sqrt(1-D). Чтобы использовать различное преобразование, необходимо преобразовать общие черты до вызова cmdscale.

Примеры

свернуть все

В этом примере показано, как создать карту 10 городов США на основе расстояний между теми городами, с помощью cmdscale.

Во-первых, создайте матрицу расстояния и передайте ее 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.6705e-10   4.8741e-17
       -897.7  -9.3685e-05
      -5467.6   -0.0005706
       -35479   -0.0037026

Однако в этом случае два самых больших положительных собственных значения намного больше в величине, чем остающиеся собственные значения. Так, несмотря на отрицательные собственные значения, первые две координаты Y достаточны для разумного воспроизведения 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')

Определите, как качество реконструкции варьируется, когда вы уменьшаете точки до расстояний с помощью различных метрик.

Сгенерируйте десять точек на 4-D пробеле, которые являются близко к 3-D пробелу. Возьмите линейное преобразование точек так, чтобы их преобразованные значения были близко к 3-D подпространству, которое не выравнивается с осями координат.

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 = 7.9936e-15

Уменьшайте точки в X к расстояниям при помощи 'cityblock' метрика. Найдите настройку Y с разделять знаками препинания расстояниями.

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

Оцените качество реконструкции. e содержит по крайней мере один отрицательный элемент большой величины, которая может составлять низкое качество реконструкции.

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

Ссылки

[1] Seber, G. A. F. Многомерные наблюдения. Хобокен, NJ: John Wiley & Sons, Inc., 1984.

Смотрите также

| |

Представлено до R2006a

Для просмотра документации необходимо авторизоваться на сайте