Этот пример показывает, как использовать 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
хорошо.