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