如何使用Mahout Streaming K-Means

时间:2013-06-24 09:36:21

标签: cluster-analysis mahout k-means

我已经看到mahout中有一个名为Streaming-Kmeans的K-Means的新实现,它实现了k-means聚类而没有链式Mapper-Reducer循环:

https://github.com/dfilimon/mahout/tree/epigrams

我没有在任何地方找到任何文章。任何人都可以指出任何有用的链接,它有一些代码示例,说明如何使用它。

2 个答案:

答案 0 :(得分:3)

StreamingKMeans是mahout .8中的一项新功能。 有关其算法的更多详细信息,请参阅: N. Ailon,R。Jaiswal,C。Monteleoni的“流媒体k均值近似” http://books.nips.cc/papers/files/nips22/NIPS2009_1085.pdf M. Shindler,A。Wong,A。Meyerson,“快速准确的大数据集k-means”, http://books.nips.cc/papers/files/nips24/NIPS2011_1271.pdf

正如您所提到的,没有关于其用法的文章。作为其他版本的聚类算法,有一个驱动程序,您可以将一些配置参数作为字符串数组传递,它将聚集您的数据:

String[] args1 = new String[] {"-i","/home/name/workspace/XXXXX-vectors/tfidf-vectors","-o","/home/name/workspace/XXXXX-vectors/tfidf-vectors/SKM-Main-result/","--estimatedNumMapClusters","200","--searchSize","2","-k","12", "--numBallKMeansRuns","3",  "--distanceMeasure","org.apache.mahout.common.distance.CosineDistanceMeasure"};

StreamingKMeansDriver.main(args1);

获取重要参数的描述只是做一个像“-iiii”这样的错误作为第一个参数。它会显示参数,描述和默认值。

但如果您不想以这种方式使用它,只需阅读StreamingKMeansMapper,StreamingKmeansReducer,StreamingKmeansThread,这3个类代码可帮助您了解算法的用法并根据您的需要对其进行costumaize。 Mapper使用StreamingKMeans生成估计的输入数据集群。 for get k final cluster Reducer获取中间点(上一步中生成的质心),并使用ballKmeans将这些中间点聚类到K cluster。

答案 1 :(得分:2)

以下是运行流媒体k-means的步骤:

  1. 通过seq2sparse生成稀疏向量。
  2. mahout streamingkmeans -i“” - o“”  --tempDir“” - 你  -sc org.apache.mahout.math.neighborhood.FastProjectionSearch  -k -km

    -k =没有集群 -km =(k * log(n))其中k = no。群集和n =否。要聚类的数据点,将其四舍五入到最接近的整数

  3. 您可以选择使用FastProjectionSearch或ProjectionSearch或LocalitySensitiveHashSearch作为-sc参数。