我针对一组序列文件运行了K-means聚类算法。但是,生成的结果如下所示:


  0属于集群1.0:[]
  
  0属于集群1.0:[]
  
  0属于集群1.0:[]
  
  0属于集群1.0:[]
  
  0属于集群1.0:[]
  
  0属于集群1.0:[]


我使用的程序是从NewsKMeansClustering.java中借用的,该示例在Mahout-in-Action的第9章中给出。

您想让我知道为什么我得到这种结果吗?是因为任何特定的参数设置要求还是其他原因?

该程序中的核心群集代码是

CanopyDriver.run(vectorsFolder, canopyCentroids, new EuclideanDistanceMeasure(), 250,    120, false, false);

KMeansDriver.run(conf, vectorsFolder, new Path(canopyCentroids, "clusters-0"),
clusterOutput, new TanimotoDistanceMeasure(), 0.01, 20, true, false);

最佳答案

我使用Mahout 0.5遇到了同样的问题。
我认为问题在于两个函数都使用了normPower参数。
尝试类似的代码。

DictionaryVectorizer.createTermFrequencyVectors(tokenizedPath,
                outputDir, conf, minSupport, maxNGramSize,
                minLLRValue,
                -1.0f, // no normalization here
                logNormalize, numReducers, chunkSize,
                sequentialAccessOutput, namedVector);
TFIDFConverter.processTfIdf(vectorOutput, new Path(outputDir,
                "tfidf"), conf, chunkSize, minDf,
                maxDFPercent,normPower,
                logNormalize, sequentialAccessOutput, namedVector,
                numReducers);


之后,我不再遇到空群集的问题。

09-18 07:25