我针对一组序列文件运行了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);
答案 0 :(得分:3)
我使用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);
之后我停止了空簇的问题。
答案 1 :(得分:2)
我有这个问题。作为一个新手,很难解决。然而,在我的情况下,我意识到冠层聚类的T1和T2值仅对路透社数据(和欧几里德规范)提供有效。我使用了自己的文档数据,这些数据似乎在文档向量之间具有固有的不同的距离分布。所以我做了一些基本的分析,然后从我自己的数据中重新估算了T1和T2。然后事情奏效了。请参阅我的帖子......
How to pick the the T1 and T2 threshold values for Canopy Clustering?
希望这有帮助。