无法获得聚类输出 Mahout

Posted

技术标签:

【中文标题】无法获得聚类输出 Mahout【英文标题】:Cannot get clustering output Mahout 【发布时间】:2014-10-18 13:30:25 【问题描述】:

我在 Mahout 中运行 kmeans,作为输出,我得到文件夹 clusters-x、clusters-x-final 和 clusteredPoints。

如果我理解得很好,clusters-x 是每次迭代中的质心位置,clusters-x-final 是最终质心位置,clusteredPoints 应该是用集群 id 和权重聚类的点,它代表属于集群的概率(取决于点与其质心之间的距离)。另一方面,clusters-x 和 clusters-x-final 包含簇的质心、元素个数、质心的特征值和集群的半径(质心与最远点之间的距离。

如何检查这些输出?

我从终端成功地为 clusters-x 和 clusters-x-final 使用了 cluster dumper,但是当我使用 clusteredPoints 时,我得到了一个空文件?似乎是什么问题?

如何从代码中获取这些值?我的意思是,属于簇的质心值和点?

对于 clusteredPoint,我在 while 循环中使用 IntWritable 作为键,使用 WeightedPropertyVectorWritable 作为值,但它通过循环就像 clusteredPoints 中没有元素一样?

这更奇怪,因为我用 clusterDumper 得到的文件是空的?

可能是什么问题?

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

我相信您对数据的解释是正确的(我只与 Mahout 合作了大约 3 周,因此可能需要更有经验的人来权衡一下)。

至于将点链接回创建它们的输入,我使用了 NamedVector,其中名称是向量的键。当您读取其中一个生成的点文件(clusteredPoints)时,您可以将每一行(点向量)转换回 NamedVector 并使用 .getName() 检索名称。

根据评论更新

当您最初将数据读入 Mahout 时,您会将其转换为向量集合,然后将其写入文件(点)以供稍后在聚类算法中使用。 Mahout 为您提供了几种可供您使用的 Vector 类型,但它们还允许您访问名为 NamedVector 的 Vector 包装器类,该类可让您识别每个向量。

例如,您可以按如下方式创建每个 NamedVector:

NamedVector nVec = new NamedVector(
    new SequentialAccessSparseVector(vectorDimensions), 
    vectorName
    );

然后你将你的 NamedVectors 集合写入文件,如下所示:

SequenceFile.Writer writer = new SequenceFile.Writer(...);
VectorWritable writable = new VectorWritable();

// the next two lines will be in a loop, but I'm omitting it for clarity
writable.set(nVec);
writer.append(new Text(nVec.getName()), nVec);

您现在可以将此文件用作其中一种聚类算法的输入。

使用您的点文件运行其中一种聚类算法后,它将生成另一个点文件,但它将位于名为 clusteredPoints 的目录中。

然后您可以读取此点文件并提取与每个向量关联的名称。它看起来像这样:

IntWritable clusterId = new IntWritable();
WeightedPropertyVectorWritable vector = new WeightedPropertyVectorWritable();

while (reader.next(clusterId, vector))

    NamedVector nVec = (NamedVector)vector.getVector();
    // you now have access to the original name using nVec.getName()

【讨论】:

【参考方案2】:

检查名为“clusterClassificationThreshold”的参数。

clusterClassificationThreshold 应该是 0。

你可以查看这个http://mail-archives.apache.org/mod_mbox/mahout-user/201211.mbox/%3C50B62629.5020700@windwardsolutions.com%3E

【讨论】:

以上是关于无法获得聚类输出 Mahout的主要内容,如果未能解决你的问题,请参考以下文章

用于获得相等大小的聚类的聚类算法

在heatmap和heatmaply R软件包中进行聚类

R中DBSCAN的聚类中心平均值?

如何在 python Scikit-learn 中获得凝聚聚类“质心”

如何获得一维数据的k均值聚类?

从聚类中获得的标签在视觉上看起来不正确