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

Этот пример показывает, как использовать cmdscale, чтобы выполнить классическое (метрическое) многомерное масштабирование, также известное как основной анализ координат.

cmdscale берет в качестве входа, матрица разделяет расстояния знаками препинания, и создает настройку точек. Идеально, те точки находятся в два или три измерения, и Евклидовы расстояния между ними воспроизводят исходную матрицу расстояния. Таким образом график рассеивания точек, созданных cmdscale, обеспечивает визуальное представление исходных расстояний.

Как очень простой пример, можно восстановить набор точек от только их разделять расстояния знаками препинания. Во-первых, создайте некоторые четырехмерные точки с маленьким компонентом в их четвертой координате и уменьшайте их до расстояний.

rng default;  % For reproducibility
X = [normrnd(0,1,10,3),normrnd(0,.1,10,1)];
D = pdist(X,'euclidean');

Затем, используйте cmdscale, чтобы найти, что настройка с теми разделяет расстояния знаками препинания. cmdscale принимает расстояния или как квадратную матрицу, или как, как в этом примере, в векторной верхне-треугольной форме, произведенной pdist.

[Y,eigvals] = cmdscale(D);

cmdscale производит два выходных параметров. Первый вывод, Y, является матрицей, содержащей восстановленные точки. Второй вывод, eigvals, является вектором, содержащим отсортированные собственные значения того, что часто упоминается как "матрица скалярного произведения", которая, в самом простом случае, равна Y*Y'. Относительные значения тех собственных значений указывают на относительный вклад соответствующих столбцов Y в репродуцировании исходной матрицы расстояния D с восстановленными точками.

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

        35.41            1
       11.158      0.31511
       1.6894      0.04771
       0.1436    0.0040553
   7.9529e-15    2.246e-16
    4.564e-15   1.2889e-16
   2.6538e-15   7.4944e-17
  -2.2475e-17  -6.3471e-19
  -3.6359e-16  -1.0268e-17
  -3.3335e-15  -9.4139e-17

Если eigvals содержит только положительный и нуль (в ошибке округления) собственные значения, столбцы Y, соответствующего положительным собственным значениям, обеспечивают точную реконструкцию D, в том смысле, что их разделять Евклидовы расстояния знаками препинания, вычисленное использование pdist, например, идентичен (в рамках округления) к значениям в D.

maxerr4 = max(abs(D - pdist(Y)))   % Exact reconstruction
maxerr4 = 
   3.5527e-15

Если два или три из собственных значений в eigvals намного больше, чем остальные, то матрица расстояния на основе соответствующих столбцов Y почти воспроизводит исходную матрицу расстояния D. В этом смысле те столбцы формируют более низко-размерное представление, которое соответственно описывает данные. Однако не всегда возможно найти хорошую низко-размерную реконструкцию.

maxerr3 = max(abs(D - pdist(Y(:,1:3))))  % Good reconstruction in 3D
maxerr3 = 
     0.043142

maxerr2 = max(abs(D - pdist(Y(:,1:2))))  % Poor reconstruction in 2D
maxerr2 = 
      0.98315

Реконструкция в трех измерениях воспроизводит D очень хорошо, но реконструкция в двух измерениях имеет ошибки, которые имеют тот же порядок величины как самые большие значения в D.

max(max(D))
ans = 
       5.8974

Часто, eigvals содержит некоторые отрицательные собственные значения, указывая, что расстояния в D не могут быть воспроизведены точно. Таким образом, не может быть никакой настройки точек, чьи разделяют Евклидовы расстояния знаками препинания, даны D. Если самое большое отрицательное собственное значение является маленьким в значении относительно самых больших положительных собственных значений, то настройка, возвращенная cmdscale, может все еще воспроизвести D хорошо.