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