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

Выполните неклассическое многомерное масштабирование с помощью 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

Рассеянный график выхода из 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 начальная точка.

Для просмотра документации необходимо авторизоваться на сайте