RandomForest - interpretação de plotagem MDS

14

Eu usei randomForest para classificar 6 comportamentos de animais (por exemplo, em pé, andando, nadando etc.) com base em 8 variáveis ​​(diferentes posturas e movimentos corporais).

O MDSplot no pacote randomForest me fornece essa saída e tenho problemas em interpretar o resultado. Eu fiz um PCA com os mesmos dados e já obtive uma boa separação entre todas as classes em PC1 e PC2, mas aqui Dim1 e Dim2 parecem apenas separar 3 comportamentos. Isso significa que esses três comportamentos são os mais diferentes do que todos os outros comportamentos (então o MDS tenta encontrar a maior dissimilaridade entre as variáveis, mas não necessariamente todas as variáveis ​​na primeira etapa)? O que indica o posicionamento dos três clusters (como por exemplo, Dim1 e Dim2)? Como sou novato no RI, também tenho problemas para traçar uma lenda para esse enredo (no entanto, tenho uma idéia do que as diferentes cores significam), mas talvez alguém possa ajudar? Muito obrigado!!

RandomForest MDSplot de 6 comportamentos animais diferentes

Eu adiciono um gráfico feito com a função ClassCenter no RandomForest. Essa função também usa a matriz de proximidade (igual à plotagem MDS) para plotar os protótipos. Mas, apenas olhando os pontos de dados para os seis comportamentos diferentes, não consigo entender por que a matriz de proximidade plotaria meus protótipos da mesma forma. Eu também tentei a função classcenter com os dados da íris e funciona. Mas parece que não funciona para os meus dados ...

Aqui está o código que eu usei para esse gráfico

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

Minha coluna de turma é a primeira, seguida por 8 preditores. Plotamos duas das melhores variáveis ​​preditoras como x e y.

Gráfico RandomForest ClassCenter para 6 comportamentos animais diferentes

Pat
fonte

Respostas:

10

A função MDSplot plota o (PCA da) matriz de proximidade. Na documentação para randomForest, a matriz de proximidade é:

Uma matriz de medidas de proximidade entre a entrada (com base na frequência em que pares de pontos de dados estão nos mesmos nós terminais).

Com base nessa descrição, podemos adivinhar o significado das diferentes parcelas. Você parece ter especificado k = 4, o que significa uma decomposição da matriz de proximidade em 4 componentes. Para cada entrada (i, j) nessa matriz de plotagens, o que é plotado é a decomposição do PCA ao longo da dimensão i versus a decomposição do PCA ao longo da dimensão j.

Eu fiz um PCA com os mesmos dados e já obtive uma boa separação entre todas as classes em PC1 e PC2, mas aqui Dim1 e Dim2 parecem apenas separar 3 comportamentos. Isso significa que esses três comportamentos são os mais diferentes do que todos os outros comportamentos (então o MDS tenta encontrar a maior dissimilaridade entre as variáveis, mas não necessariamente todas as variáveis ​​na primeira etapa)?

O MDS pode basear sua análise apenas na saída de sua randomForest. Se você está esperando uma separação melhor, convém verificar o desempenho da classificação de sua randomForest. Outro aspecto a ter em mente é que seu PCA está mapeando de dados 9-dimensionais para 2 dimensões, mas o MDS está mapeando de uma matriz de proximidade dimensional NxN para 2 dimensões, em que N é o número de pontos de dados.

O que indica o posicionamento dos três grupos (como por exemplo, Dim1 e Dim2)?

Apenas mostra a que distância (relativamente) esses clusters estão um do outro. É uma ajuda de visualização, para que eu não a interprete demais.

Como sou novato no RI, também tenho problemas para traçar uma lenda para esse enredo (no entanto, tenho uma idéia do que as diferentes cores significam), mas talvez alguém possa ajudar?

Da maneira que R funciona, não há como plotar legendas após o fato (ao contrário do Matlab, onde essas informações são armazenadas dentro do objeto de figura). No entanto, observando o código do MDSplot, vemos que o bloco de código relevante é:

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

...

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

Portanto, as cores serão tiradas dessa paleta e mapeadas para os níveis (comportamentos) na ordem que você tiver dado. Então, se você deseja traçar uma lenda:

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

provavelmente funcionaria.

FrankD
fonte
Muito obrigado pela sua resposta, isso é realmente útil! O desempenho da classificação do meu modelo de floresta aleatória é bastante bom (taxa de erro de OOB 4,94% e precisão de 95% com CV), por isso eu esperava uma melhor separação no gráfico MDS. Também tentei plotar uma figura com a função classCenter para protótipos das classes (segui o exemplo da íris no manual de RF), mas como a função também usa a matriz de proximidade, os protótipos parecem não fazer sentido. Mas nesta trama é óbvio que as classes se separam muito bem, mas os protótipos não.
Pat
Vou adicionar o gráfico do ClassCenter à minha pergunta acima. Eu também pensei que as diferentes escalas dos meus preditores podem ser o problema, mas parece que a escala não é necessária ao usar a floresta aleatória. Eu tentei rapidamente o comando legend, mas não funcionou, mas acho que provavelmente estou cometendo um erro. Amanhã tentarei outra vez. Obrigado novamente!
Pat