我使用R的mclust庫(http://www.stat.washington.edu/mclust)做一些實驗性的基於EM的GMM聚類。該軟件包非常棒,似乎通常可以爲我的數據找到非常好的羣集。如何將mclust的聚類結果寫入文件?
問題是,我根本不知道R,並且儘管我已經設法根據help()內容和廣泛的自述文件來了解羣集過程,但是我不能爲我的生活弄清楚如何寫出實際的集羣結果來存檔。我正在使用以下荒謬簡單的腳本來執行羣集,
myData <- read.csv("data.csv", sep=",", header=FALSE)
attach(myData)
myBIC <- mclustBIC(myData)
mySummary <- summary(myBIC, data=myData)
在哪一點我有羣集結果和摘要。 data.csv中的數據只是多維點的列表,每行一個。所以每行看起來像'x,y,z'(在3維的情況下)。
如果我使用2d點(例如只是x和y vals),我可以使用內部繪圖函數來獲得一個非常漂亮的圖形,它根據分配給它的集羣繪製每個點的原始點和顏色代碼。所以我知道所有的信息都在'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
其反射後,我意識到其實是樣品及其分類的列表。我想這是不可能直接通過寫命令寫這篇文章,但在R控制檯更多的實驗使我意識到,我可以這樣做:
> newData <- mySummary$classification
> write(newData, file="class.csv")
和結果實際上看起來相當不錯!
$ head class.csv
"","x"
"1",1
"2",2
"3",2
其中第一列與輸入數據的索引顯着匹配,第二列描述分配的類別標識。
'mySummary $ parameters'對象似乎是嵌套的,並且有一堆子對象對應於各個gaussians及其參數等等。當我試圖寫出它時,'write'函數失敗,但是單獨寫出每個子對象名稱有點繁瑣。這導致了我一個新的問題:我如何迭代R中的嵌套對象,並以串行方式將元素打印到文件描述符中?
我有這個'mySummary $ parameters'對象。它由幾個子對象組成,如'mySummary $ parameters $ variance $ sigma'等。我想只是迭代所有內容並將其全部打印到文件中,方法與自動執行CLI相同。
太棒了!非常感謝你的詳細的破敗。我想這將需要一段時間才能習慣R的怪癖(就像任何新語言一樣)。這給了我一些重要的見解。我也非常驚訝於我已經設法做了多少事,而不知道任何關於R的事情。再次感謝。 – si28719e 2012-01-18 06:44:13
我很像你那樣陷入了R,所以我知道你的意思,當我第一次開始時,我感覺自己像一隻猴子在我的鍵盤上甩開:P祝你好運! – 2012-01-18 06:46:00
我知道評論應該避免「+1」和「謝謝」,但是'myData $ CLUST < - myMclust $ classification'&'myMclust < - Mclust(myData,modelNames =「EEI」)'很美,正是我需要。我還附加了z分數('MyData $ PROB < - MyClust $ z')以查看每個記錄的集羣成員的相對概率。 – NiuBiBang 2014-07-15 17:16:00