Неклассическое и неметрическое многомерное масштабирование

Выполните неклассическое многомерное масштабирование с помощью mdscale.

Неклассическое многомерное масштабирование

Функция mdscale выполняет неклассическое многомерное масштабирование. Как с cmdscale, вы используете mdscale или чтобы визуализировать данные о несходстве, для которых никакие “местоположения” не существуют, или визуализировать высоко-размерные данные путем сокращения его размерности. Обе функции берут матрицу несходств как вход и производят настройку точек. Однако mdscale предлагает выбор различных критериев создать настройку и позволяет недостающие данные и веса.

Например, зерновые данные включают измерения на 10 переменных, описывающих блюда из хлопьев для завтрака. Можно использовать mdscale визуализировать эти данные в двух измерениях. Во-первых, загрузите данные. Для ясности этот пример кода выбирает подмножество 22 из наблюдений.

load cereal.mat
X = [Calories Protein Fat Sodium Fiber ... 
    Carbo Sugars Shelf Potass Vitamins];
% Take a subset from a single manufacturer
mfg1 = strcmp('G',cellstr(Mfg));
X = X(mfg1,:);
size(X)
ans =
    22 10

Затем используйте pdist преобразовать 10-мерные данные в несходства. Выход от pdist симметричная матрица несходства, сохраненная как вектор, содержащий только (23*22/2) элементы в его верхнем треугольнике.

dissimilarities = pdist(zscore(X),'cityblock');
size(dissimilarities)
ans =
     1   231

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

Затем используйте mdscale выполнять метрический MDS. В отличие от cmdscale, необходимо задать желаемое количество размерностей и метод, чтобы использовать, чтобы создать выходную настройку. В данном примере используйте две размерности. Метрический критерий STRESS является общепринятой методикой для вычисления выхода; для другого выбора смотрите mdscale страница с описанием в онлайн-документации. Второй выход от mdscale значение того критерия, оцененного для выходной настройки. Это измеряется, как хорошо разделять знаками препинания расстояния выходной настройки аппроксимируют исходные входные несходства:

[Y,stress] =... 
mdscale(dissimilarities,2,'criterion','metricstress');
stress
stress =
    0.1856

scatterplot выхода от mdscale представляет исходные 10-мерные данные в двух измерениях, и можно использовать gname функционируйте, чтобы пометить выбранные точки:

plot(Y(:,1),Y(:,2),'o','LineWidth',2);
gname(Name(mfg1))

Неметрическое многомерное масштабирование

Метрическое многомерное масштабирование создает настройку точек, чьи разделяют знаками препинания расстояния, аппроксимированные данные несходства. Это иногда - слишком строгое требование, и неметрическое масштабирование спроектировано, чтобы ослабить его немного. Вместо того, чтобы пытаться аппроксимировать сами несходства, неметрическое масштабирование аппроксимирует нелинейное, но монотонное, преобразование их. Из-за монотонности большие или меньшие расстояния на графике выхода будут соответствовать большим или меньшим несходствам, соответственно. Однако нелинейность подразумевает тот mdscale только попытки сохранить упорядоченное расположение несходств. Таким образом могут быть сокращения или расширения расстояний в различных шкалах.

Вы используете mdscale выполнять неметрический MDS почти таким же способом что касается метрического масштабирования. Неметрический критерий STRESS является общепринятой методикой для вычисления выхода; для большего количества вариантов смотрите mdscale страница с описанием в онлайн-документации. Как с метрическим масштабированием, вторым выходом от mdscale значение того критерия, оцененного для выходной настройки. Для неметрического масштабирования, однако, это измеряется, как хорошо разделять знаками препинания расстояния выходной настройки аппроксимируют несоизмеримости. Несоизмеримости возвращены в третьем выходе. Они - преобразованные значения исходных несходств:

[Y,stress,disparities] = ... 
mdscale(dissimilarities,2,'criterion','stress');
stress
stress =
    0.1562

Чтобы проверять припадок выходной настройки к несходствам и изучить несоизмеримости, это помогает сделать график Шепарда:

distances = pdist(Y);
[dum,ord] = sortrows([disparities(:) dissimilarities(:)]);
plot(dissimilarities,distances,'bo', ...
     dissimilarities(ord),disparities(ord),'r.-', ...
     [0 25],[0 25],'k-')
xlabel('Dissimilarities')
ylabel('Distances/Disparities')
legend({'Distances' 'Disparities' '1:1 Line'},...
       'Location','NorthWest');

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

mdscale использует итеративный алгоритм, чтобы найти выходную настройку, и результаты могут часто зависеть от начальной точки. По умолчанию, mdscale использование cmdscale создать начальную настройку и этот выбор часто приводит к глобально лучшему решению. Однако это возможно для mdscale остановиться в настройке, которая является локальным минимумом критерия. Такие случаи могут быть диагностированы и часто преодолеваться путем выполнения mdscale многократно с различными начальными точками. Можно сделать это использование 'start' и 'replicates' аргументы в виде пар имя-значение. Следующий код запускается пять, реплицирует MDS, каждый запускающийся в различной случайным образом выбранной начальной настройке. Значение критерия распечатывается для каждой репликации; mdscale возвращает настройку с лучшей подгонкой.

opts = statset('Display','final');
[Y,stress] =... 
mdscale(dissimilarities,2,'criterion','stress',... 
'start','random','replicates',5,'Options',opts);

35 iterations, Final stress criterion = 0.156209
31 iterations, Final stress criterion = 0.156209
48 iterations, Final stress criterion = 0.171209
33 iterations, Final stress criterion = 0.175341
32 iterations, Final stress criterion = 0.185881

Заметьте, что mdscale находит несколько различных локальных решений, некоторые из которых не имеют столь низкого значения напряжений, как решение нашло с cmdscale начальная точка.