В этом примере показано, как визуализировать многомерные данные с помощью различных статистических графиков. Много статистических анализов включают только две переменные: переменный предиктор и переменная отклика. Такие данные легки визуализировать использующие 2D графики рассеивания, двумерные гистограммы, коробчатые диаграммы, и т.д. Также возможно визуализировать trivariate данные с 3D графиками рассеивания или 2D графиками рассеивания с третьей переменной, закодированной с, например, окрасить. Однако много наборов данных включают большее число переменных, делая прямую визуализацию более трудной. Этот пример исследует некоторые способы визуализировать высоко-размерные данные в MATLAB®, с помощью Statistics and Machine Learning 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 цилиндрических автомобилей состоит в том, что у первого есть более высокие значения MPG и ускорения и нижних значений смещения, лошадиной силы, и особенно веса, в то время как у последних есть противоположное. Это - тот же вывод, который мы сделали из параллельного графика координат.
Другой способ визуализировать многомерные данные состоит в том, чтобы использовать "глифы", чтобы представлять размерности. Функциональный glyphplot
поддержки два типа глифов: звезды и поверхности Чернофф. Например, вот звездообразный график первых 9 моделей в автомобильных данных. Каждый говорил в звезде, представляет одну переменную, и говорил, длина пропорциональна значению той переменной для того наблюдения.
h = glyphplot(X(1:9,:), 'glyph','star', 'varLabels',varNames, 'obslabels',Model(1:9,:)); set(h(:,3),'FontSize',8);
В живом графическом окне MATLAB этот график позволил бы интерактивное исследование значений данных, с помощью Data Cursor. Например, нажатие справа на точку звезды для Ford Torino показало бы, что имеет значение MPG 17.
Графический вывод звезд на сетке, без особого порядка, может привести к фигуре, которая сбивает с толку, потому что смежные звезды могут закончиться выглядящие очень отличающимся образом. Таким образом не может быть никакого сглаженного шаблона для глаза, чтобы отловить. Часто полезно объединить многомерное масштабирование (MDS) с графиком глифа. Чтобы проиллюстрировать, мы будем сначала выбирать все автомобили от 1 977 и использовать 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