我正在使用 R 的 mclust 库(http://www.stat.washington.edu/mclust)来做一些基于 EM 的实验性 GMM 聚类。该软件包很棒,似乎通常可以为我的数据找到非常好的集群。
问题是我根本不了解 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 值),我可以使用内部绘图函数来获得一个非常漂亮的图表,该图表根据分配给它的集群绘制原始点和每个点的颜色代码。所以我知道所有信息都在“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
其中第一列显然与输入数据的索引匹配,第二列描述了分配的类标识。
'mySummary$parameters' 对象似乎是嵌套的,并且有一堆对应于各个高斯及其参数等的子对象。当我尝试将其写出但单独写入时,'write' 函数失败取出每个子对象的名字有点繁琐。这让我想到了一个新问题:如何遍历 R 中的嵌套对象并将元素以串行方式打印到文件描述符?
我有这个“mySummary$parameters”对象。它由几个子对象组成,例如“mySummary$parameters$variance$sigma”等。我想迭代所有内容并将其全部打印到文件中,就像在 CLI 中自动完成的那样...