RandomForest-MDSプロットの解釈


14

randomForestを使用して、8つの変数(さまざまな体の姿勢と動き)に基づいて6つの動物の行動(たとえば、立ち、歩き、水泳など)を分類しました。

randomForestパッケージのMDSplotはこの出力を提供し、結果の解釈に問題があります。私は同じデータでPCAを実行し、PC1とPC2のすべてのクラス間で既に良好な分離を得ましたが、ここではDim1とDim2は3つの動作を分離しているようです。これは、これらの3つの動作が他のすべての動作よりも非類似であることを意味します(したがって、MDSは変数間の最大の非類似性を見つけようとしますが、必ずしも最初のステップですべての変数が一致するわけではありません)?3つのクラスターの配置(Dim1やDim2など)は何を示していますか?私はRIが初めてなので、このプロットに凡例をプロットするのにも問題があります(ただし、さまざまな色が何を意味するかはわかりますが)。どうもありがとう!!

6種類の動物行動のRandomForest MDSplot

RandomForestにClassCenter関数で作成したプロットを追加します。この関数は、プロトタイプのプロットに近接行列(MDSプロットと同じ)も使用します。しかし、6つの異なる動作のデータポイントを見るだけでは、なぜ近接行列がプロトタイプをプロットするのか理解できません。また、虹彩データを使用して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つの予測子がそれに続きます。2つの最良の予測変数をxとyとしてプロットしました。

6種類の動物の行動に関するRandomForest ClassCenterプロット

回答:


10

関数MDSplotは、近接行列(のPCA)をプロットします。randomForestのドキュメントから、近接行列は次のとおりです。

入力間の近接度のマトリックス(データポイントのペアが同じターミナルノードにある頻度に基づく)。

この説明に基づいて、さまざまなプロットの意味を推測できます。k = 4を指定しているようです。これは、4つのコンポーネントの近接行列の分解を意味します。このプロットのマトリックスの各エントリ(i、j)について、プロットされるのは、次元iに沿ったPCA分解対次元jに沿ったPCA分解です。

私は同じデータでPCAを実行し、PC1とPC2のすべてのクラス間で既に良好な分離を得ましたが、ここではDim1とDim2は3つの動作を分離しているようです。これは、これらの3つの動作が他のすべての動作よりも非類似であることを意味します(したがって、MDSは変数間の最大の非類似性を見つけようとしますが、必ずしも最初のステップですべての変数が一致するわけではありません)?

MDSは、randomForestの出力のみに基づいて分析を行うことができます。より良い分離を期待している場合は、randomForestの分類パフォーマンスを確認することをお勧めします。PCAは9次元データから2次元にマッピングしますが、MDSはNxN次元の近接行列から2次元にマッピングします。Nはデータポイントの数です。

3つのクラスターの配置(Dim1やDim2など)は何を示していますか?

これらのクラスターが互いに(比較的)どれだけ離れているかを示すだけです。それは視覚化の助けなので、私はそれを過剰に解釈しません。

私はRIが初めてなので、このプロットに凡例をプロットするのにも問題があります(ただし、さまざまな色が何を意味するかはわかりますが)。

Rが機能する方法では、事後の凡例をプロットする方法はありません(たとえば、この情報がFigureオブジェクト内に保存される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マニュアルの虹彩の例に従いました)が、関数も近接行列を使用するため、プロトタイプは意味をなさないようです。しかし、このプロットでは、クラスがうまく分離されているのは明らかですが、プロトタイプはそうではありません。
パット

上記の質問にClassCenterプロットを追加します。また、予測変数のさまざまなスケールが問題になる可能性があると考えましたが、ランダムフォレストを使用する場合はスケーリングは必要ないようです。私はすぐにlegendコマンドを試しましたが、うまくいきませんでしたが、おそらく間違いを犯していると思います。明日もう一度試してみます。再度、感謝します!
パット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.