我使用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