RandomForest-MDS图解说明


14

我使用randomForest根据8个变量(不同的身体姿势和动作)对6种动物行为进行了分类(例如,站立,行走,游泳等)。

randomForest软件包中的MDSplot给我该输出,并且在解释结果时遇到问题。我对相同的数据进行了PCA,并且已经在PC1和PC2中的所有类之间实现了很好的分隔,但是在这里Dim1和Dim2似乎仅分隔了3种行为。这是否意味着这三种行为比所有其他行为的相异性更高(因此MDS会尝试在变量之间找到最大的相异性,但不一定要在第一步中找到所有变量)?这三个群集的位置(例如在Dim1和Dim2中)指示什么?由于我对RI不太熟悉,因此在该图上绘制图例也有困难(但是我知道不同颜色的含义),但是也许有人可以帮忙吗?非常感谢!!

6种不同动物行为的RandomForest MDSplot

我在RandomForest中添加使用ClassCenter函数绘制的图。此功能还使用接近矩阵(与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。

用于6种不同动物行为的RandomForest ClassCenter图

Answers:


10

MDSplot函数绘制接近矩阵的(PCA)。从randomForest的文档中,接近矩阵为:

输入之间的接近度矩阵(基于数据点对在同一终端节点中的频率)。

基于此描述,我们可以猜测不同图的含义。您似乎已指定k = 4,这意味着将接近矩阵分解为4个分量。对于该图矩阵中的每个条目(i,j),绘制的是沿维i的PCA分解与沿维j的PCA分解。

我对相同的数据进行了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%,CV的准确性为95%),这就是为什么我希望在MDS图中实现更好的分离。我也尝试使用classCenter函数为类的原型绘制一个图(我遵循了RF手册中的iris示例),但是由于该函数还使用了接近矩阵,因此原型似乎没有任何意义。但是在此图中,很明显,这些类很好地分开了,但是原型却没有。
2012年

我将在上面的问题中添加ClassCenter图。我还认为可能是我的预测变量的比例不同,但似乎在使用随机森林时不需要缩放。我只是很快尝试了Legend命令,但它没有用,但我认为可能是我犯了一个错误。明天再试一次。再次感谢!
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.