Mahout K-means聚类给我的结果就像0属于集群1.0:[]

时间:2011-08-10 13:54:54

标签: machine-learning mahout

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

2 个答案:

答案 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?

希望这有帮助。