RandomForest - Interprétation du tracé MDS

14

J'ai utilisé randomForest pour classer 6 comportements d'animaux (par exemple, debout, marcher, nager, etc.) en fonction de 8 variables (différentes postures corporelles et mouvements).

Le MDSplot dans le package randomForest me donne cette sortie et j'ai des problèmes pour interpréter le résultat. J'ai fait un PCA sur les mêmes données et j'ai déjà une bonne séparation entre toutes les classes de PC1 et PC2, mais ici Dim1 et Dim2 semblent séparer juste 3 comportements. Est-ce à dire que ces trois comportements sont les plus différents de tous les autres comportements (donc MDS essaie de trouver la plus grande dissemblance entre les variables, mais pas nécessairement toutes les variables dans la première étape)? Qu'est-ce que le positionnement des trois clusters (comme par exemple dans Dim1 et Dim2) indique? Étant donné que je suis plutôt nouveau sur RI, j'ai également des problèmes pour tracer une légende sur cette intrigue (mais j'ai une idée de la signification des différentes couleurs), mais peut-être que quelqu'un pourrait aider? Merci beaucoup!!

RandomForest MDSplot de 6 comportements d'animaux différents

J'ajoute un tracé fait avec la fonction ClassCenter dans RandomForest. Cette fonction utilise également la matrice de proximité (identique à celle du tracé MDS) pour tracer les prototypes. Mais juste en regardant les points de données pour les six comportements différents, je ne comprends pas pourquoi la matrice de proximité tracerait mes prototypes comme elle le fait. J'ai également essayé la fonction classcenter avec les données de l'iris et cela fonctionne. Mais il semble que cela ne fonctionne pas pour mes données ...

Voici le code que j'ai utilisé pour ce complot

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"))

Ma colonne de classe est la première, suivie de 8 prédicteurs. J'ai tracé deux des meilleures variables prédictives comme x et y.

Parcelle RandomForest ClassCenter pour 6 comportements d'animaux différents

Tapoter
la source

Réponses:

10

La fonction MDSplot trace la (PCA de) la matrice de proximité. D'après la documentation de randomForest, la matrice de proximité est:

Une matrice de mesures de proximité entre l'entrée (basée sur la fréquence à laquelle les paires de points de données se trouvent dans les mêmes nœuds terminaux).

Sur la base de cette description, nous pouvons deviner ce que signifient les différents graphiques. Vous semblez avoir spécifié k = 4, ce qui signifie une décomposition de la matrice de proximité en 4 composantes. Pour chaque entrée (i, j) dans cette matrice de graphiques, ce qui est tracé est la décomposition PCA le long de la dimension i par rapport à la décomposition PCA le long de la dimension j.

J'ai fait un PCA sur les mêmes données et j'ai déjà une bonne séparation entre toutes les classes de PC1 et PC2, mais ici Dim1 et Dim2 semblent séparer juste 3 comportements. Est-ce à dire que ces trois comportements sont les plus différents de tous les autres comportements (donc MDS essaie de trouver la plus grande dissemblance entre les variables, mais pas nécessairement toutes les variables dans la première étape)?

MDS ne peut baser son analyse que sur la sortie de randomForest. Si vous vous attendez à une meilleure séparation, vous voudrez peut-être vérifier les performances de classification de votre randomForest. Une autre chose à garder à l'esprit est que votre PCA mappe des données à 9 dimensions à 2 dimensions, mais le MDS mappe d'une matrice de proximité à dimensions NxN à 2 dimensions, où N est le nombre de points de données.

Qu'est-ce que le positionnement des trois clusters (comme par exemple dans Dim1 et Dim2) indique?

Il vous indique simplement à quelle distance (relativement) ces grappes sont éloignées les unes des autres. C'est une aide à la visualisation, donc je ne l'interpréterais pas trop.

Étant donné que je suis plutôt nouveau sur RI, j'ai également des problèmes pour tracer une légende sur cette intrigue (mais j'ai une idée de la signification des différentes couleurs), mais peut-être que quelqu'un pourrait aider?

La façon dont R fonctionne, il n'y a aucun moyen de tracer la légende après coup (contrairement à Matlab, par exemple, où ces informations sont stockées à l'intérieur de l'objet figure). Cependant, en regardant le code de MDSplot, nous voyons que le bloc de code pertinent est:

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

...

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

Ainsi, les couleurs seront prises à partir de cette palette et mappées aux niveaux (comportements) dans l'ordre que vous leur avez donné. Donc, si vous voulez tracer une légende:

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

fonctionnerait probablement.

FrankD
la source
Merci beaucoup pour votre réponse, c'est vraiment utile !! Les performances de classification de mon modèle de forêt aléatoire sont assez bonnes (taux d'erreur OOB 4,94% et précision de 95% avec CV), c'est pourquoi je m'attendais à une meilleure séparation dans le tracé MDS. J'ai également essayé de tracer une figure avec la fonction classCenter pour les prototypes des classes (j'ai suivi l'exemple de l'iris dans le manuel RF), mais comme la fonction utilise également la matrice de proximité, les prototypes ne semblent tout simplement pas avoir de sens. Mais dans cette intrigue, il est évident que les classes se séparent bien, mais pas les prototypes.
Pat
J'ajouterai le tracé ClassCenter à ma question ci-dessus. J'ai également pensé que les différentes échelles de mes prédicteurs pourraient être le problème, mais il semble que la mise à l'échelle ne soit pas nécessaire lors de l'utilisation d'une forêt aléatoire. J'ai juste essayé rapidement la commande legend mais cela n'a pas fonctionné, mais je pense que c'est probablement moi qui fais une erreur. Je vais essayer de nouveau demain. Merci encore!
Pat