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)

мабуть, спрацює.


Велике спасибі за вашу відповідь, це дуже корисно !! Ефективність класифікації моєї випадкової лісової моделі є досить хорошою (коефіцієнт помилок OOB 4,94% та точність 95% з CV), тому я очікував кращого розділення в графіку MDS. Я також спробував побудувати фігуру з функцією classCenter для прототипів класів (я дотримувався прикладу райдужки в керівництві РФ), але оскільки функція також використовує матрицю близькості, прототипи просто не мають сенсу. Але в цьому сюжеті очевидно, що класи добре виділяються, але прототипи цього не роблять.
Пт

Я додам сюжет ClassCenter до мого запитання вище. Я також подумав, що проблема може бути різними масштабами моїх прогнозів, але, здається, масштабування не потрібне при використанні випадкових лісів. Я просто швидко спробував команду legend, але це не вийшло, але я думаю, що я, мабуть, помиляюся. Завтра спробую ще раз. Знову дякую!
Пт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.