В этом примере показано, как использовать 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 reconstructionmaxerr4 = 2.6645e-15
Если два или три собственных значения в eigvals намного больше остальных, то матрица расстояний на основе соответствующих столбцов Y почти воспроизводит исходную матрицу расстояний D. В этом смысле эти столбцы образуют представление нижних размеров, которое адекватно описывает данные. Однако не всегда удается найти хорошую низкоразмерную реконструкцию.
maxerr3 = max(abs(D - pdist(Y(:,1:3)))) % Good reconstruction in 3Dmaxerr3 =
0.043142
maxerr2 = max(abs(D - pdist(Y(:,1:2)))) % Poor reconstruction in 2Dmaxerr2 =
0.98315
Реконструкция в трех измерениях воспроизводит D очень хорошо, но реконструкция в двух измерениях имеет ошибки, которые имеют тот же порядок величины, что и наибольшие значения в D.
max(max(D))
ans =
5.8974
Часто, eigvals содержит некоторые отрицательные собственные значения, указывающие, что расстояния в D невозможно воспроизвести в точности. То есть, не может быть никакой конфигурации точек, межточечные евклидовы расстояния которых задаются D. Если наибольшее отрицательное собственное значение мало по величине относительно наибольших положительных собственных значений, то конфигурация возвращается cmdscale может еще воспроизвести D что ж.