我在Mahout中运行kmeans,作为输出,我得到文件夹clusters-x,clusters-x-final和clusteredPoints .
如果我理解得很好,cluster-x是每次迭代中的质心位置,cluster-x-final是最终的质心位置,clusteredPoints应该是聚类的簇,其中簇ID和权重代表属于簇的概率(取决于点与其质心之间的距离) . 另一方面,cluster-x和clusters-x-final包含聚类质心,元素数量,质心的特征值和聚类的半径(质心与其最远点之间的距离) .
我该如何检查这些输出?
我成功地将群集转储器用于终端的clusters-x和clusters-x-final,但是当我使用clusteredPoints时,我得到了一个空文件?什么似乎是问题?
我怎样才能从代码中获取这些值?我的意思是,质心值和属于集群的点?
FOr clusteredPoint我在一个while循环中使用IntWritable作为键,使用WeightedPropertyVectorWritable作为值,但它传递循环,就像clusteredPoints中没有元素一样?
这更奇怪,因为我使用clusterDumper获取的文件是空的?
可能是什么问题呢?
任何帮助将不胜感激!
2 回答
我相信你对这些数据的解释是正确的(我只和Mahout一起工作了大约3个星期,所以经验丰富的人应该对此有所了解) .
至于将点链接回创建它们的输入,我使用了NamedVector,其中名称是向量的键 . 当您读取其中一个生成的点文件(clusteredPoints)时,您可以将每一行(点向量)转换回NamedVector并使用.getName()检索名称 .
更新以回应评论
当您最初将数据读入Mahout时,将其转换为矢量集合,然后使用该集合将其写入文件(点)以便稍后在聚类算法中使用 . Mahout为您提供了几种可以使用的Vector类型,但它们还允许您访问名为NamedVector的Vector包装类,它允许您识别每个向量 .
例如,您可以按如下方式创建每个NamedVector:
然后你将NamedVectors的集合写入文件,例如:
您现在可以将此文件用作其中一个聚类算法的输入 .
在使用您的点文件运行其中一个聚类算法之后,它将生成另一个点文件,但它将位于名为clusteredPoints的目录中 .
然后,您可以读入此点文件并提取与每个向量关联的名称 . 它看起来像这样:
检查名为“clusterClassificationThreshold”的参数 .
clusterClassificationThreshold应为0 .
你可以查一下http://mail-archives.apache.org/mod_mbox/mahout-user/201211.mbox/%3C50B62629.5020700@windwardsolutions.com%3E