0

我针对一组序列文件运行了 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);
4

2 回答 2

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);

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

于 2011-09-19T10:32:55.033 回答
2

我有这个问题。作为一个新手,解决起来非常困难。然而,就我而言,我意识到树冠聚类的 T1 和 T2 值仅对提供的​​路透社数据(和欧几里得范数)有效。我使用了我自己的文档数据,这些文档数据似乎在文档向量之间的距离分布本质上不同。所以我做了一些基本的分析,然后根据我自己的数据重新估计了 T1 和 T2。然后事情奏效了。另见我的帖子...

如何选择 Canopy 聚类的 T1 和 T2 阈值?

希望这可以帮助。

于 2011-11-09T07:53:40.763 回答