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