R 用の mclust ライブラリ ( http://www.stat.washington.edu/mclust ) を使用して、実験的な EM ベースの GMM クラスタリングを行っています。このパッケージは素晴らしく、通常、私のデータに非常に適したクラスターを見つけているようです。
問題は、私が 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
そして、うまくいけば、クラスタリングプロセスが見つけた個々のガウス/クラスターのパラメーター/セントロイドも出力します。
確かに、これはとてつもなく簡単なことであり、私はRについて無知すぎて理解できません...
編集:私はもう少し先に進んでいるようです。以下を実行すると、やや不可解なマトリックスが出力されます。
> mySummary$classification
[1] 1 1 2 1 3
[6] 1 1 1 3 1
[12] 1 2 1 3 1
[18] 1 3
よく考えてみると、これは実際にはサンプルとその分類のリストであることに気付きました。write コマンドを使用してこれを直接書き込むことはできないと思いますが、R コンソールでもう少し実験を行うと、これが可能であることがわかりました。
> newData <- mySummary$classification
> write( newData, file="class.csv" )
そして、結果は実際にはかなりきれいに見えます!
$ head class.csv
"","x"
"1",1
"2",2
"3",2
ここで、最初の列は明らかに入力データのインデックスと一致し、2 番目の列は割り当てられたクラス ID を示しています。
ただし、「mySummary$parameters」オブジェクトはネストされているように見え、個々のガウス分布とそのパラメーターなどに対応する一連のサブオブジェクトがあります。「書き込み」関数は、書き出そうとすると失敗しますが、個別に書き込みます各サブオブジェクト名を出すのは少し面倒です。R でネストされたオブジェクトを反復処理し、その要素をシリアル形式でファイル記述子に出力するにはどうすればよいですか?
この「mySummary$parameters」オブジェクトがあります。これは、「mySummary$parameters$variance$sigma」などのいくつかのサブオブジェクトで構成されています。CLI に対して自動的に行われるのと同じ方法で、すべてを反復処理してすべてファイルに出力したいと思います...