Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将mclust中的聚类结果写入文件?_R_Printing_Mclust - Fatal编程技术网

R 如何将mclust中的聚类结果写入文件?

R 如何将mclust中的聚类结果写入文件?,r,printing,mclust,R,Printing,Mclust,我正在使用R()的mclust库来进行一些基于EM的GMM集群实验。该软件包非常棒,似乎通常可以为我的数据找到非常好的集群 问题是,我根本不了解R,虽然我已经成功地通过了基于help()内容和大量自述文件的聚类过程,但我一辈子都不知道如何将实际的聚类结果写入文件。我正在使用以下极其简单的脚本来执行集群 myData <- read.csv("data.csv", sep=",", header=FALSE) attach(myData) myBIC <- mclustBIC(myDa

我正在使用R()的mclust库来进行一些基于EM的GMM集群实验。该软件包非常棒,似乎通常可以为我的数据找到非常好的集群

问题是,我根本不了解R,虽然我已经成功地通过了基于help()内容和大量自述文件的聚类过程,但我一辈子都不知道如何将实际的聚类结果写入文件。我正在使用以下极其简单的脚本来执行集群

myData <- read.csv("data.csv", sep=",", header=FALSE)
attach(myData)
myBIC <- mclustBIC(myData)
mySummary <- summary( myBIC, data=myData )
然后——希望如此——还打印出聚类过程发现的各个高斯/簇的参数/质心

当然,这是一件非常简单的事情,我对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" )
其中第一列显然与输入数据的索引匹配,第二列描述分配的类标识

“mySummary$parameters”对象似乎是嵌套的,并且有一堆子对象,对应于各个高斯数及其参数等。当我尝试将其写出来时,“write”函数失败,但单独写出每个子对象名称有点乏味。这就引出了一个新问题:如何迭代R中的嵌套对象,并以串行方式将元素打印到文件描述符


我有一个“mySummary$parameters”对象。它由几个子对象组成,如“mySummary$parameters$variance$sigma”等。我只想迭代所有内容并将其打印到文件中,就像对CLI自动执行一样…

以计算实际的聚类参数本身(平均值、方差、每个点所属的聚类),您需要使用
Mclust
。 要进行编写,您可以使用(例如)
write.csv

默认情况下,
Mclust
根据BIC确定的最佳模型计算参数,因此,如果您想这样做,可以执行以下操作:

myMclust <- Mclust(myData)
# 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 ""
write.csv
上的注释-如果不在
行中输入.names=FALSE
,您将在csv中获得一个包含行号的额外列。另外,
quote=FALSE
将列标题设置为
CLUST,x,y,z
,否则它们将是
“CLUST”,“x”,“y”,“z”
。这是你的选择

假设我们想做同样的事情,但是使用不同模型的参数,这不是最优的。但是,默认情况下,
Mclust
仅为最佳模型计算参数。要计算特定模型的参数(例如
“EEI”
),您需要执行以下操作:

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

myMclust真棒!非常感谢您的详细介绍。我想需要一段时间来适应R的怪癖(就像任何新语言一样)。这让我对正在发生的事情有了一些重要的见解。我也很惊讶我在不了解R的情况下做了这么多。再次感谢。我很像你一样掉进了R,所以我知道你的意思,当我第一次开始时,我感觉自己就像一只猴子在敲打键盘:P祝你好运!我知道注释应该避免使用“+1”和“谢谢”,但是
myData$CLUST@niubibbang,请注意
MyClust$z
返回一个概率矩阵,该矩阵显示每个观测值落在每个簇中的概率。所以当你做
MyData$PROB
# 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 ""
myMclust <- Mclust(myData,modelNames="EEI")