2012-01-18 2 views
6

私はR(http://www.stat.washington.edu/mclust)のmclustライブラリを使って、実験的なEMベースのGMMクラスタリングを行っています。パッケージは素晴らしいですし、私のデータのために非常に良いクラスターを見つけるのが一般的です。mclustの結果をファイルに書き込むにはどうしたらいいですか?

問題は、私は本当にRを知らないし、help()の内容と豊富なreadmeに基づいてクラスタリングプロセスを混乱させてしまったが、私の人生は分からない実際のクラスタ結果をファイルに書き出す方法。私はクラスタリングを実行するために次のばかげた単純なスクリプトを使用しています。

myData <- read.csv("data.csv", sep=",", header=FALSE) 
attach(myData) 
myBIC <- mclustBIC(myData) 
mySummary <- summary(myBIC, data=myData) 

この時点で私はクラスタ結果と要約を持っています。 data.csvのデータは、1行に1つずつ、多次元点のリストにすぎません。したがって、各行は 'x、y、z'(3次元の場合)のように見えます。

2次元の点(xとyの値など)を使用すると、内部プロット関数を使用して、割り当てられたクラスターに基づいて元の点とカラーコードをプロットする非常に美しいグラフを得ることができます。ですから、私はすべての情報が 'myBIC'のどこかにあることを知っていますが、ドキュメントやヘルプはこのデータをどのように印刷するかについての洞察を提供していないようです。

私はmyBICでエンコードされていると思われる結果に基づいて新しいファイルをプリントアウトします。何かのように、

CLUST x, y, z 
1 1.2, 3.4, 5.2 
1 1.2, 3.3, 5.2 
2 5.5, 1.3, 1.3 
3 7.1, 1.2, -1.0 
3 7.2, 1.2, -1.1 

、その後 - うまくいけば - また、パラメータをプリントアウト/クラスタリング処理が見つかった個々のガウス/クラスタの重心。

確かにこれを行うのはばかばかしいほど簡単なことであると私は...

EDITをそれを把握するためにRのあまりにも無知だ:私はさらに沿って少し得ているように見えます。私が実現反射時いくらか不可解マトリックス、

> mySummary$classification 
[1] 1 1 2 1 3 
[6] 1 1 1 3 1 
[12] 1 2 1 3 1 
[18] 1 3 

次印刷を行うと、実際のサンプルとその分類のリストです。私は書き込みコマンドを経由してこれを直接書き込むことはできません推測するが、Rコンソールでもう少し実験が、私はこれを行うことができますことを実現するために私を導く:

> newData <- mySummary$classification 
> write(newData, file="class.csv") 

、結果は実際にはかなり良さそうだということ!最初の列はapparenly入力データのインデックスと一致し、第2列は、割り当てられたクラスIDを記述する

$ head class.csv 
"","x" 
"1",1 
"2",2 
"3",2 

'mySummary $ parameters'オブジェクトはネストされているように見えますが、個々のガウス関数とそのパラメータなどに対応するサブオブジェクトの束があります。書き出ししようとすると 'write'関数が失敗します個々のサブオブジェクト名を個別に書き出すのはちょっと面倒です。どのようにしてRの入れ子になったオブジェクトを反復処理し、要素をファイル記述子にシリアル形式で出力するのですか?

私はこの 'my​​Summary $ parameters'オブジェクトを持っています。これは、 'mySummary $ parameters $ variance $ sigma'などのいくつかのサブオブジェクトで構成されています。すべてを繰り返し処理して、これをCLIに自動的に行われるのと同じ方法でファイルに出力します。

答えて

8

実際のクラスタリングパラメータそのもの(平均値、分散、各点が属するクラスタ)を計算するには、Mclustを使用する必要があります。 書き込みを行うには、たとえばwrite.csvを使用できます。 BICによって決定されることは、あなたが何をしたいなら、あなたが行うことができますので、デフォルトMclustことで

は、最も最適なモデルに基づいてパラメータを計算します。そして、

myMclust <- Mclust(myData) 

myMclust$BICは、すべての結果が含まれています他のモデル(すなわちmyMclust$BICmclustBIC(myData)と多かれ少なかれ同じです)。

Value:セクションの?Mclustを参照してください。myMclustにはどのような情報がありますか。たとえば、myMclust$parameters$meanは各クラスタの平均であり、myMclust$parameters$varianceは各クラスタの分散を表します。

myMclust$classificationは、各ポイントが属するクラスタを含み、最適なモデルで計算されます。 write.csv

# create some data for example purposes -- you have your read.csv(...) instead. 
myData <- data.frame(x=runif(100),y=runif(100),z=runif(100)) 
# get parameters for most optimal model 
myMclust <- Mclust(myData) 
# if you wanted to do your summary like before: 
mySummary <- summary(myMclust$BIC, data=myData) 

# add a column in myData CLUST with the cluster. 
myData$CLUST <- myMclust$classification 
# now to write it out: 
write.csv(myData[,c("CLUST","x","y","z")], # reorder columns to put CLUST first 
      file="out.csv",     # output filename 
      row.names=FALSE,     # don't save the row numbers 
      quote=FALSE)      # don't surround column names in "" 

注意を - あなたはrow.names=FALSEに入れていない場合は、あなたのCSVファイルを含むで余分な列を取得します:

だから、あなたが望む出力を得るために、あなたが行うことができます行番号。また、quote=FALSEは、列見出しをCLUST,x,y,zと置き換えます。それ以外の場合は、"CLUST","x","y","z"となります。それはあなたの選択です。

同じことをしたいが、最適ではない別のモデルのパラメータを使用するとします。ただし、Mclustは、デフォルトで最適なモデルのパラメータのみを計算します。

myMclust <- Mclust(myData,modelNames="EEI") 

をして、以前のように進みます。特定のモデルのパラメータを("EEI"を言う)を計算するために、あなたは何だろう。

+0

恐ろしい!詳細な作業をしてくれてありがとう。 Rの癖に慣れるにはしばらく時間がかかるだろうと思う。これは、何が起こっているかについて私にいくつかの重要な洞察を与えました。私はまた、Rについて何も知らないうちに、私が何とかやっていたことにかなり驚きました。もう一度ありがとう。 – si28719e

+0

私はあなたのことと同じようにRに落ちたので、あなたが何を意味しているのか知っています。私が最初に始めたときに私のキーボードを叩いているような感じでした:P Good luck! –

+0

コメントは "+1"& "ありがとう"を避けるべきだと知っていますが、 'myData $ CLUST < - myMclust $ classification'&' myMclust < - Mclust(myData、modelNames = "EEI") 'は美しいです必要です。また、各レコードのクラスタメンバーシップの相対的な確率を調べるために、zスコア( 'MyData $ PROB < - MyClust $ z')を追加しました。 – NiuBiBang

関連する問題