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

В этом примере показано, как использовать 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
   3.1014e-15   8.7586e-17
   2.3149e-15   6.5375e-17
   7.5173e-16   2.1229e-17
  -5.4911e-17  -1.5507e-18
  -1.9507e-15   -5.509e-17
  -3.9794e-15  -1.1238e-16

Если 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 что ж.