3

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

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

我没有找到任何关于它在任何地方使用的文章。谁能指出任何有用的链接,其中有一些关于如何使用它的代码示例。

4

2 回答 2

3

StreamingKMeans 是 mahout .8 中的一项新功能。有关其算法的更多详细信息,请参见:N. Ailon、R. Jaiswal、C. Monteleoni 的“流式 k 均值近似” http://books.nips.cc/papers/files/nips22/NIPS2009_1085.pdf “Fast and大型数据集的准确 k 均值”,M. Shindler、A. Wong、A. Meyerson, 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 个类代码可以帮助你了解算法的用法并根据需要对其进行定制。Mapper 使用 StreamingKMeans 生成估计的输入数据集群。为了得到 k 个最终集群,Reducer 获取中间点(在上一步中生成的质心),并通过使用 ballKmeans 将这些中间点聚集到 K 个集群中。

于 2013-06-30T08:48:39.090 回答
2

以下是运行 Streaming k-means 的步骤:

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

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

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

于 2013-08-06T21:05:12.487 回答