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