RandomForest - интерпретация сюжета MDS

14

Я использовал randomForest для классификации 6 поведений животных (например, стоя, ходьбы, плавания и т. Д.) На основе 8 переменных (различные позы тела и движения).

MDSplot в пакете randomForest дает мне этот вывод, и у меня возникают проблемы с интерпретацией результата. Я сделал PCA на тех же данных и уже получил хорошее разделение между всеми классами в PC1 и PC2, но здесь Dim1 и Dim2, кажется, разделяют 3 поведения. Означает ли это, что эти три поведения более отличаются друг от друга, чем все другие поведения (поэтому MDS пытается найти наибольшее различие между переменными, но не обязательно всеми переменными на первом этапе)? Что указывает расположение трех кластеров (например, в Dim1 и Dim2)? Так как я довольно новичок в RI, у меня также есть проблемы с написанием легенды для этого сюжета (однако у меня есть идея, что означают разные цвета), но, возможно, кто-нибудь мог бы помочь? Большое спасибо!!

RandomForest MDSplot 6 различных видов поведения животных

Я добавляю график, сделанный с помощью функции ClassCenter в RandomForest. Эта функция также использует матрицу близости (такую ​​же, как в графике MDS) для построения прототипов. Но, просто взглянув на точки данных для шести различных вариантов поведения, я не могу понять, почему матрица близости построит мои прототипы так, как это происходит. Я также попробовал функцию classcenter с данными радужной оболочки, и она работает. Но похоже, что это не работает для моих данных ...

Вот код, который я использовал для этого сюжета

be.rf <- randomForest(Behaviour~., data=be, prox=TRUE, importance=TRUE)
class1 <- classCenter(be[,-1], be[,1], be.rf$prox)
Protoplot <- plot(be[,4], be[,7], pch=21, xlab=names(be)[4], ylab=names(be)[7], bg=c("red", "green", "blue", "yellow", "turquoise", "orange") [as.numeric(factor(be$Behaviour))])
points(class1[,4], class1[,7], pch=21, cex=2, bg=c("red", "green", "blue", "yellow", "turquoise", "orange"))

Мой класс столбец первый, за которым следуют 8 предикторов. Я изобразил две лучшие переменные предиктора как x и y.

График RandomForest ClassCenter для 6 различных видов поведения животных

похлопывание
источник

Ответы:

10

Функция MDSplot строит (PCA) матрицу близости. Из документации для randomForest, матрица близости:

Матрица мер близости среди входных данных (на основе частоты, с которой пары точек данных находятся в одних и тех же терминальных узлах).

Основываясь на этом описании, мы можем догадаться, что означают различные графики. Кажется, вы указали k = 4, что означает разложение матрицы близости на 4 компонента. Для каждой записи (i, j) в этой матрице графиков изображено разложение PCA по измерению i по сравнению с разложением PCA по измерению j.

Я сделал PCA на тех же данных и уже получил хорошее разделение между всеми классами в PC1 и PC2, но здесь Dim1 и Dim2, кажется, разделяют 3 поведения. Означает ли это, что эти три поведения более отличаются друг от друга, чем все другие поведения (поэтому MDS пытается найти наибольшее различие между переменными, но не обязательно всеми переменными на первом этапе)?

MDS может основывать свой анализ только на результатах вашего randomForest. Если вы ожидаете лучшего разделения, то вы можете проверить эффективность классификации вашего randomForest. Следует также помнить, что ваш PCA отображает из 9-мерных данных в 2 измерения, но MDS отображает из NxN-мерной матрицы близости в 2 измерения, где N - количество точек данных.

Что указывает расположение трех кластеров (например, в Dim1 и Dim2)?

Это просто говорит вам, насколько далеко (относительно) эти кластеры находятся друг от друга. Это средство визуализации, поэтому я бы не стал его чрезмерно интерпретировать.

Так как я довольно новичок в RI, у меня также есть проблемы с написанием легенды для этого сюжета (однако у меня есть идея, что означают разные цвета), но, возможно, кто-нибудь мог бы помочь?

Как работает R, нет способа построить легенду за фактом (в отличие, скажем, от Matlab, где эта информация хранится внутри объекта рисунка). Однако, глядя на код для MDSplot, мы видим, что соответствующий блок кода:

palette <- if (require(RColorBrewer) && nlevs < 12) brewer.pal(nlevs, "Set1")

...

plot(rf.mds$points, col = palette[as.numeric(fac)], pch = pch, ...)

Таким образом, цвета будут взяты из этой палитры и сопоставлены с уровнями (поведением) в любом порядке, который вы им дали. Так что если вы хотите построить легенду:

legend(x,y,levels(fac),col=brewer.pal(nlevs, 'Set1'), pch=pch)

вероятно, будет работать.

FrankD
источник
Большое спасибо за ваш ответ, это действительно полезно! Классификационная производительность моей модели случайного леса довольно хорошая (частота ошибок OOB 4,94% и точность 95% с CV), поэтому я ожидал лучшего разделения на графике MDS. Я также попытался построить фигуру с помощью функции classCenter для прототипов классов (я следовал примеру радужной оболочки в руководстве по радиочастотам), но поскольку функция также использует матрицу близости, прототипы просто не имеют смысла. Но в этом сюжете очевидно, что классы хорошо выделяются, а прототипы - нет.
Пэт
Я добавлю график ClassCenter к моему вопросу выше. Я также подумал, что проблема может заключаться в разных масштабах моих предикторов, но кажется, что масштабирование не нужно при использовании случайного леса. Я просто быстро попробовал команду легенды, но она не сработала, но я думаю, что, возможно, я ошибаюсь. Завтра попробую еще раз. Еще раз спасибо!
Пэт