В этом примере показано, как визуализировать многомерные данные с использованием различных статистических графиков. Во многих статистических анализах используются только две переменные: переменная предиктора и переменная ответа. Такие данные легко визуализировать с помощью 2D графиков рассеяния, двумерных гистограмм, боксплотов и т.д. Также можно визуализировать трехмерные данные с 3D графиками рассеяния или 2D графиками рассеяния с третьей переменной, закодированной, например, цветом. Тем не менее, многие наборы данных включают большее количество переменных, что затрудняет прямую визуализацию. В этом примере рассматриваются некоторые способы визуализации высокоразмерных данных в MATLAB ® с использованием Toolbox™ статистики и машинного обучения.
В этом примере мы будем использовать carbig набор данных, который содержит различные измеренные переменные для примерно 400 автомобилей 1970-х и 1980-х годов. Мы иллюстрируем многомерную визуализацию, используя значения топливной эффективности (в милях на галлон, MPG), ускорения (время от 0-60MPH в секунду), рабочего объема двигателя (в кубических дюймах), веса и лошадиных сил. Мы используем количество цилиндров для группирования наблюдений.
load carbig X = [MPG,Acceleration,Displacement,Weight,Horsepower]; varNames = {'MPG'; 'Acceleration'; 'Displacement'; 'Weight'; 'Horsepower'};
Просмотр фрагментов через нижние размерные подпространства является одним из способов частичной работы вокруг ограничения двух или трех размеров. Например, мы можем использовать gplotmatrix функция для отображения массива всех двумерных графиков рассеяния между нашими пятью переменными вместе с одномерной гистограммой для каждой переменной.
figure gplotmatrix(X,[],Cylinders,['c' 'b' 'm' 'g' 'r'],[],[],false); text([.08 .24 .43 .66 .83], repmat(-.1,1,5), varNames, 'FontSize',8); text(repmat(-.12,1,5), [.86 .62 .41 .25 .02], varNames, 'FontSize',8, 'Rotation',90);

Точки на каждом графике рассеяния окрашиваются по числу цилиндров: синий для 4 цилиндров, зеленый для 6 и красный для 8. Имеется также горстка из 5 цилиндров, а роторно-моторные автомобили перечислены как имеющие 3 цилиндра. Этот массив графиков упрощает выбор шаблонов в отношениях между парами переменных. Однако в высших измерениях могут быть важные закономерности, и их нелегко распознать в этом сюжете.
Матрица графика рассеяния отображает только двухмерные отношения. Однако есть и другие альтернативы, которые отображают все переменные вместе, позволяя исследовать отношения более высоких размеров между переменными. Наиболее прямолинейным многомерным графиком является график параллельных координат. На этом графике все координатные оси выкладываются горизонтально, вместо использования ортогональных осей, как в обычном декартовом графе. Каждое наблюдение представляется на графике в виде последовательности соединенных отрезков. Например, мы можем сделать график всех автомобилей с 4, 6 или 8 цилиндрами, и цветовые наблюдения по группам.
Cyl468 = ismember(Cylinders,[4 6 8]); parallelcoords(X(Cyl468,:), 'group',Cylinders(Cyl468), ... 'standardize','on', 'labels',varNames)

Горизонтальное направление на этом графике представляет координатные оси, а вертикальное направление - данные. Каждое наблюдение состоит из измерений по пяти переменным, и каждое измерение представляется как высота, на которой соответствующая линия пересекает каждую координатную ось. Поскольку пять переменных имеют широко различающиеся диапазоны, этот график был сделан со стандартизированными значениями, где каждая переменная была стандартизирована так, чтобы иметь нулевое среднее значение и единичную дисперсию. При цветовом кодировании график показывает, например, что 8 цилиндровых автомобилей обычно имеют низкие значения для MPG и ускорения и высокие значения для смещения, веса и лошадиных сил.
Даже при цветовом кодировании по группам параллельный график координат с большим количеством наблюдений может быть трудночитаемым. Мы также можем сделать график параллельных координат, где показаны только медиана и квартили (25% и 75% точек) для каждой группы. Это облегчает различение типичных различий и сходств между группами. С другой стороны, наиболее интересны могут быть отбросы для каждой группы, и этот сюжет их вовсе не показывает.
parallelcoords(X(Cyl468,:), 'group',Cylinders(Cyl468), ... 'standardize','on', 'labels',varNames, 'quantile',.25)

Другим подобным типом многомерной визуализации является график Эндрюса. Этот график представляет каждое наблюдение как гладкую функцию на интервале [0,1].
andrewsplot(X(Cyl468,:), 'group',Cylinders(Cyl468), 'standardize','on')

Каждая функция представляет собой ряд Фурье с коэффициентами, равными значениям соответствующего наблюдения. В этом примере ряд имеет пять членов: константу, два синусоидальных члена с периодами 1 и 1/2 и два аналогичных косинусных члена. Влияние на формы функций из-за трех ведущих членов наиболее очевидно на графике Эндрюса, поэтому паттерны в первых трех переменных, как правило, наиболее легко распознаются.
Существует явное различие между группами при t = 0, указывающее на то, что первая переменная, MPG, является одной из отличительных черт между 4, 6 и 8 цилиндровыми автомобилями. Более интересной является разница между тремя группами при около t = 1/3. Вставив это значение в формулу для функций графика Эндрюса, получим набор коэффициентов, определяющих линейную комбинацию переменных, различающих группы.
t1 = 1/3; [1/sqrt(2) sin(2*pi*t1) cos(2*pi*t1) sin(4*pi*t1) cos(4*pi*t1)]
ans =
0.7071 0.8660 -0.5000 -0.8660 -0.5000
Из этих коэффициентов видно, что один из способов отличить 4-цилиндровые машины от 8-цилиндровых состоит в том, что первые имеют более высокие значения МПГ и ускорения, и более низкие значения водоизмещения, лошадиных сил, и особенно веса, тогда как вторые имеют обратное. Это тот же вывод, который мы сделали из графика параллельных координат.
Другим способом визуализации многомерных данных является использование «глифов» для представления измерений. Функция glyphplot поддерживает два типа глифов: звезды и грани Черноффа. Например, вот звездный сюжет первых 9 моделей в данных автомобиля. Каждая спица в звезде представляет одну переменную, и длина спицы пропорциональна значению этой переменной для этого наблюдения.
h = glyphplot(X(1:9,:), 'glyph','star', 'varLabels',varNames, 'obslabels',Model(1:9,:)); set(h(:,3),'FontSize',8);

В реальном окне фигуры MATLAB этот график позволит интерактивно исследовать значения данных с использованием курсоров данных. Например, щелчок правой точки звезды для Ford Torino покажет, что она имеет значение MPG 17.
Рисование звёзд на сетке, без особого порядка, может привести к фигуре, которая запутана, потому что соседние звёзды могут в конечном итоге выглядеть совершенно иначе. Таким образом, может не быть гладкого рисунка для глаза, чтобы поймать. Часто полезно комбинировать многомерное масштабирование (MDS) с глифовым графиком. Для иллюстрации мы сначала выберем все автомобили 1977 года выпуска и используем zscore функция для стандартизации каждой из пяти переменных, чтобы иметь нулевое среднее и единичную дисперсию. Затем мы вычислим евклидовы расстояния между этими стандартизированными наблюдениями как меру разнородности. Этот выбор может оказаться слишком упрощенным в реальном применении, но служит здесь для иллюстрации.
models77 = find((Model_Year==77)); dissimilarity = pdist(zscore(X(models77,:)));
Наконец, мы используем mdscale для создания набора расположений в двух измерениях, расстояния между точками которых приближаются к различиям между исходными высокомерными данными, и построения графика глифов с использованием этих расположений. Расстояния на этом 2D графике могут только грубо воспроизводить данные, но для этого типа графика это достаточно хорошо.
Y = mdscale(dissimilarity,2); glyphplot(X(models77,:), 'glyph','star', 'centers',Y, ... 'varLabels',varNames, 'obslabels',Model(models77,:), 'radius',.5); title('1977 Model Year');

На этом графике мы использовали MDS как метод уменьшения размеров для создания 2D графика. Как правило, это означает потерю информации, но, выводя на график глифы, мы включили всю высокомерную информацию в данные. Целью использования MDS является введение некоторой регулярности в вариации данных, так что шаблоны среди глифов легче увидеть.
Так же, как и с предыдущим сюжетом, интерактивная разведка была бы возможна в окне живой фигуры.
Другой тип глифа - грань Черноффа. Этот глиф кодирует значения данных для каждого наблюдения в элементы лица, такие как размер лица, форма лица, положение глаз и т.д.
glyphplot(X(models77,:), 'glyph','face', 'centers',Y, ... 'varLabels',varNames, 'obslabels',Model(models77,:)); title('1977 Model Year');

Здесь два наиболее очевидных признака, размер лица и относительный размер лба/челюсти, кодируют MPG и ускорение, в то время как форма лба и челюсти кодируют смещение и вес. Ширина между глазами кодирует лошадиную силу. Примечательно, что существует мало лиц с широкими лбами и узкими челюстями, или наоборот, что указывает на положительную линейную корреляцию между смещением переменных и весом. Это также то, что мы видели в матрице графика рассеяния.
Соответствие элементов переменным определяет, какие отношения легче всего видеть, и glyphplot позволяет легко изменить выбор.
close