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

В этом примере показано, как выполнить классическое многомерное масштабирование с помощью cmdscale функция в Statistics and Machine Learning Toolbox™. Классическое многомерное масштабирование, также известное как Основной Анализ Координат, берет матрицу, разделяют расстояния знаками препинания, и создает настройку точек. Идеально, те точки могут быть созданы в два или три измерения, и Евклидовы расстояния между ними приблизительно воспроизводят исходную матрицу расстояния. Таким образом график рассеивания тех точек обеспечивает визуальное представление исходных расстояний.

Этот пример иллюстрирует приложения многомерного масштабирования к мерам по несходству кроме пространственного расстояния и показывает, как создать настройку точек, чтобы визуализировать те несходства.

Этот пример описывает классическое многомерное масштабирование. mdscale функция выполняет неклассический MDS, который иногда более гибок, чем классический метод. Неклассический MDS описан в Неклассическом Многомерном примере Масштабирования.

Восстановление пространственных местоположений от непространственных расстояний

Предположим, что вы измерили генетическое "расстояние" или несходство, между многими локальными подпопуляциями одного вида животного. Вы также знаете их географические точки и хотели бы знать, как тесно их генетические и пространственные расстояния соответствуют. Если они делают, который является доказательством, что межпородное скрещивание между подпопуляциями затронуто их географическими точками.

Ниже пространственные местоположения подпопуляций и верхний треугольник матрицы генетических расстояний, в том же векторном формате, произведенном pdist.

X = [39.1     18.7;
     40.7     21.2;
     41.5     21.5;
     39.2     21.8;
     38.7     20.6;
     41.7     20.1;
     40.1     22.1;
     39.2     21.6];

D = [4.69 6.79 3.50 3.11 4.46 5.57 3.00 ...
          2.10 2.27 2.65 2.36 1.99 1.74 ...
               3.78 4.53 2.83 2.44 3.79 ...
                    1.98 4.35 2.07 0.53 ...
                         3.80 3.31 1.47 ...
                              4.35 3.82 ...
                                   2.57];

Несмотря на то, что этот векторный формат для D эффективно пробелом, часто легче видеть отношения расстояния, если вы переформатировали расстояния до квадратной матрицы.

squareform(D)
ans = 8×8

         0    4.6900    6.7900    3.5000    3.1100    4.4600    5.5700    3.0000
    4.6900         0    2.1000    2.2700    2.6500    2.3600    1.9900    1.7400
    6.7900    2.1000         0    3.7800    4.5300    2.8300    2.4400    3.7900
    3.5000    2.2700    3.7800         0    1.9800    4.3500    2.0700    0.5300
    3.1100    2.6500    4.5300    1.9800         0    3.8000    3.3100    1.4700
    4.4600    2.3600    2.8300    4.3500    3.8000         0    4.3500    3.8200
    5.5700    1.9900    2.4400    2.0700    3.3100    4.3500         0    2.5700
    3.0000    1.7400    3.7900    0.5300    1.4700    3.8200    2.5700         0

cmdscale распознает любой из этих двух форматов.

[Y,eigvals] = cmdscale(D);

cmdscaleсначала выведите, Y, матрица точек, созданных, чтобы иметь, разделяют знаками препинания расстояния, которые воспроизводят расстояния в D. С восемью разновидностями, точки (строки Y) мог иметь целых восемь размерностей (столбцы Y). Визуализация генетических расстояний зависит от использования точек в только двух или трех измерениях. К счастью, cmdscaleвторой выход, eigvals, набор отсортированных собственных значений, относительные величины которых указывают, сколько размерностей можно безопасно использовать. Если только первые два или три собственных значения являются большими, то только те координаты точек в Y необходимы, чтобы точно воспроизвести D. Если больше чем три собственных значения являются большими, то не возможно найти хорошую низко-размерную настройку точек, и не будет легко визуализировать расстояния.

[eigvals eigvals/max(abs(eigvals))]
ans = 8×2

   29.0371    1.0000
   13.5746    0.4675
    2.0987    0.0723
    0.7418    0.0255
    0.3403    0.0117
    0.0000    0.0000
   -0.4542   -0.0156
   -3.1755   -0.1094

Заметьте, что существует только два больших положительных собственных значения, таким образом, настройка точек, созданных cmdscale может быть построен в двух измерениях. Два отрицательных собственных значения указывают, что генетические расстояния не являются Евклидовыми, то есть, никакая настройка точек не может воспроизвести D точно. К счастью, отрицательные собственные значения малы относительно самых больших положительных единиц и сокращения к первым двум столбцам Y должно быть довольно точным. Можно проверять это путем рассмотрения ошибки в расстояниях между двумерной настройкой и исходных расстояниях.

maxrelerr = max(abs(D - pdist(Y(:,1:2)))) / max(D)
maxrelerr = 0.1335

Теперь можно сравнить "генетические местоположения", созданные cmdscale к фактическим географическим точкам. Поскольку настройка, возвращенная cmdscale уникально только до перевода, вращения и отражения, генетические местоположения, вероятно, не будут совпадать с географическими точками. У них также будет неправильная шкала. Но можно использовать procrustes команда, чтобы подойти эти два набора точек лучше всего в смысле наименьших квадратов.

[D,Z] = procrustes(X,Y(:,1:2));
plot(X(:,1),X(:,2),'bo',Z(:,1),Z(:,2),'rd');
labels = num2str((1:8)');
text(X(:,1)+.05,X(:,2),labels,'Color','b');
text(Z(:,1)+.05,Z(:,2),labels,'Color','r');
xlabel('Distance East of Reference Point (Km)');
ylabel('Distance North of Reference Point (Km)');
legend({'Spatial Locations','Constructed Genetic Locations'},'Location','SE');

Figure contains an axes. The axes contains 18 objects of type line, text. These objects represent Spatial Locations, Constructed Genetic Locations.

Этот график показывает лучшее соответствие восстановленных точек в тех же координатах как фактические пространственные местоположения. По-видимому, генетические расстояния действительно имеют тесную связь к пространственным расстояниям между подпопуляциями.

Визуализация корреляционной матрицы Используя многомерное масштабирование

Предположим, что вы вычислили следующую корреляционную матрицу для набора 10 переменных. Очевидно, что эти переменные все положительно коррелируются, и что существуют некоторые очень сильные попарные корреляции. Но с этим много переменных, не легко получить хорошее ощущение отношений среди всех 10.

Rho = ...
  [1       0.3906  0.3746  0.3318  0.4141  0.4279  0.4216  0.4703  0.4362  0.2066;
   0.3906  1       0.3200  0.3629  0.2211  0.9520  0.9811  0.9052  0.4567  0     ;
   0.3746  0.3200  1       0.8993  0.7999  0.3589  0.3460  0.3333  0.8639  0.6527;
   0.3318  0.3629  0.8993  1       0.7125  0.3959  0.3663  0.3394  0.8719  0.5726;
   0.4141  0.2211  0.7999  0.7125  1       0.2374  0.2079  0.2335  0.7050  0.7469;
   0.4279  0.9520  0.3589  0.3959  0.2374  1       0.9657  0.9363  0.4791  0.0254;
   0.4216  0.9811  0.3460  0.3663  0.2079  0.9657  1       0.9123  0.4554  0.0011;
   0.4703  0.9052  0.3333  0.3394  0.2335  0.9363  0.9123  1       0.4418  0.0099;
   0.4362  0.4567  0.8639  0.8719  0.7050  0.4791  0.4554  0.4418  1       0.5272;
   0.2066  0       0.6527  0.5726  0.7469  0.0254  0.0011  0.0099  0.5272  1     ];

Многомерное масштабирование часто считается путем к (ре) точки построения с помощью только попарные расстояния. Но это может также использоваться с мерами по несходству, которые являются более общими, чем расстояние, чтобы пространственно визуализировать вещи, которые не являются "точками на пробеле" в обычном смысле. Переменные, описанные Ро, являются примером, и можно использовать cmdscale построить визуальное представление их взаимозависимостей.

Корреляция на самом деле измеряет подобие, но легко преобразовать его к мере несходства. Поскольку все корреляции здесь положительны, можно просто использовать

D = 1 - Rho;

несмотря на то, что другой выбор может также быть целесообразным. Если Rho содержавшие отрицательные корреляции, необходимо было бы решить, выбирают ли, например, корреляция-1 обозначенного более или менее несходства, чем корреляция 0, и преобразование соответственно.

Важно решить, является ли визуализация информации в корреляционной матрице четной возможная, то есть, может ли количество размерностей быть сокращено от десять вниз к два или три. Собственные значения возвращены cmdscale дайте вам способ решить. В этом случае график каменистой осыпи тех собственных значений показывает, что двух размерностей достаточно, чтобы представлять переменные. (Заметьте, что некоторые собственные значения в графике ниже являются отрицательными, но маленькими относительно первых двух.)

[Y,eigvals] = cmdscale(D);
plot(1:length(eigvals),eigvals,'bo-');
line([1,length(eigvals)],[0 0],'LineStyle',':','XLimInclude','off',...
     'Color',[.7 .7 .7])
axis([1,length(eigvals),min(eigvals),max(eigvals)*1.1]);
xlabel('Eigenvalue number');
ylabel('Eigenvalue');

Figure contains an axes. The axes contains 2 objects of type line.

В более независимом наборе переменных может быть необходимо больше размерностей. Если больше чем три переменные необходимы, визуализация не все это полезное.

2D график настройки возвращен cmdscale указывает, что существует два подмножества переменных, которые наиболее тесно коррелируются между собой плюс одна переменная, которая является более или менее самостоятельно. Один из кластеров высок, в то время как другой относительно свободно.

labels = {' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9',' 10'};
plot(Y(:,1),Y(:,2),'bx');
axis(max(max(abs(Y))) * [-1.1,1.1,-1.1,1.1]); axis('square');
text(Y(:,1),Y(:,2),labels,'HorizontalAlignment','left');
line([-1,1],[0 0],'XLimInclude','off','Color',[.7 .7 .7])
line([0 0],[-1,1],'YLimInclude','off','Color',[.7 .7 .7])

Figure contains an axes. The axes contains 13 objects of type line, text.

С другой стороны, результаты cmdscale поскольку следующая корреляционная матрица указывает на большое количество отличной структуры: среди переменных нет никаких действительных групп. Скорее существует своего рода "круговая" зависимость, где каждая переменная имеет пару "самых близких соседей", но менее хорошо коррелируется с остающимися переменными.

Rho = ...
  [1       0.7946  0.1760  0.2560  0.7818  0.4496  0.2732  0.3995  0.5305  0.2827;
   0.7946  1       0.1626  0.4227  0.5674  0.6183  0.4004  0.2283  0.3495  0.2777;
   0.1760  0.1626  1       0.2644  0.1864  0.1859  0.4330  0.4656  0.3947  0.8057;
   0.2560  0.4227  0.2644  1       0.1017  0.7426  0.8340  0       0.0499  0.4853;
   0.7818  0.5674  0.1864  0.1017  1       0.2733  0.1484  0.4890  0.6138  0.2025;
   0.4496  0.6183  0.1859  0.7426  0.2733  1       0.6303  0.0648  0.1035  0.3242;
   0.2732  0.4004  0.4330  0.8340  0.1484  0.6303  1       0.1444  0.1357  0.6291;
   0.3995  0.2283  0.4656  0       0.4890  0.0648  0.1444  1       0.8599  0.3948;
   0.5305  0.3495  0.3947  0.0499  0.6138  0.1035  0.1357  0.8599  1       0.3100;
   0.2827  0.2777  0.8057  0.4853  0.2025  0.3242  0.6291  0.3948  0.3100  1     ];

[Y,eigvals] = cmdscale(1-Rho);
[eigvals eigvals./max(abs(eigvals))]
ans = 10×2

    1.1416    1.0000
    0.7742    0.6782
    0.0335    0.0294
    0.0280    0.0245
    0.0239    0.0210
    0.0075    0.0066
    0.0046    0.0040
   -0.0000   -0.0000
   -0.0151   -0.0132
   -0.0472   -0.0413

plot(Y(:,1),Y(:,2),'bx');
axis(max(max(abs(Y))) * [-1.1,1.1,-1.1,1.1]); axis('square');
text(Y(:,1),Y(:,2),labels,'HorizontalAlignment','left');
line([0 0],[-1,1],'XLimInclude','off','Color',[.7 .7 .7])
line([-1,1],[0 0],'YLimInclude','off','Color',[.7 .7 .7])

Figure contains an axes. The axes contains 13 objects of type line, text.

Сравнение анализа основных компонентов и классического многомерного масштабирования

Многомерное масштабирование чаще всего используется, чтобы визуализировать данные, когда только их расстояния или несходства доступны. Однако, когда исходные данные доступны, многомерное масштабирование может также использоваться в качестве метода сокращения размерности, путем сокращения данных до матрицы расстояния, создания новой настройки точек с помощью cmdscale, и сохранение только первых нескольких размерностей тех точек. Это приложение многомерного масштабирования во многом как Анализ Основных компонентов, и на самом деле, когда вы вызываете cmdscale с помощью Евклидовых расстояний между точками результаты идентичны PCA до изменения в знаке.

n = 10; m = 5;
X = randn(n,m);
D = pdist(X,'Euclidean');

[Y,eigvals] = cmdscale(D);
[PC,Score,latent] = pca(X);

Y
Y = 10×5

   -1.4505    1.6602    0.8106    0.5834    0.5952
    2.6140   -1.0513   -1.1962    0.7221   -0.2299
   -2.2399   -1.6699   -0.7881   -0.6659    0.0398
   -0.4956    0.2265    1.2682   -0.5123   -0.5702
    0.1004   -2.3659    1.2672    0.4837   -0.2888
   -2.5996    1.0635   -0.8532    0.1392   -0.1216
   -1.5565    0.4215   -0.0931    0.2863    0.0299
    0.4656   -0.6250   -0.7608   -0.3233    0.2786
    2.3961    2.6933   -0.2020   -0.2572   -0.4374
    2.7660   -0.3529    0.5474   -0.4560    0.7044

Score
Score = 10×5

   -1.4505    1.6602   -0.8106   -0.5834   -0.5952
    2.6140   -1.0513    1.1962   -0.7221    0.2299
   -2.2399   -1.6699    0.7881    0.6659   -0.0398
   -0.4956    0.2265   -1.2682    0.5123    0.5702
    0.1004   -2.3659   -1.2672   -0.4837    0.2888
   -2.5996    1.0635    0.8532   -0.1392    0.1216
   -1.5565    0.4215    0.0931   -0.2863   -0.0299
    0.4656   -0.6250    0.7608    0.3233   -0.2786
    2.3961    2.6933    0.2020    0.2572    0.4374
    2.7660   -0.3529   -0.5474    0.4560   -0.7044

Даже ненулевые собственные значения идентичны до масштабного коэффициента.

[eigvals(1:m) (n-1)*latent]
ans = 5×2

   36.9993   36.9993
   21.3766   21.3766
    7.5792    7.5792
    2.2815    2.2815
    1.5981    1.5981