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

В этом примере показано, как использовать 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.4101    1.0000
   11.1579    0.3151
    1.6894    0.0477
    0.1436    0.0041
    0.0000    0.0000
    0.0000    0.0000
    0.0000    0.0000
    0.0000    0.0000
   -0.0000   -0.0000
   -0.0000   -0.0000

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

maxerr4 = max(abs(D - pdist(Y)))   % Exact reconstruction
maxerr4 = 
   2.6645e-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 хорошо.