我针对一组序列文件运行了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);
之后,我不再遇到空群集的问题。