使用 Spark KMeans 算法打印 ClusterID 及其元素。

Posted

技术标签:

【中文标题】使用 Spark KMeans 算法打印 ClusterID 及其元素。【英文标题】:Printing ClusterID and its elements using Spark KMeans algo. 【发布时间】:2015-01-12 09:25:41 【问题描述】:

我有这个程序可以在 apache-spark 上打印 Kmeans 算法的 MSSE。生成了 20 个集群。我正在尝试打印 clusterID 和分配给相应 clusterID 的元素。我如何循环 clusterID 以打印元素。

谢谢你们!!

           val sc = new SparkContext("local", "KMeansExample","/usr/local/spark/", List("target/scala-2.10/kmeans_2.10-1.0.jar"))
            // Load and parse the data
            val data = sc.textFile("kmeans.csv")
         val parsedData = data.map( s => Vectors.dense(s.split(',').map(_.toDouble)))

        // Cluster the data into two classes using KMeans
        val numIterations = 20
        val numClusters = 20
        val clusters = KMeans.train(parsedData, numClusters, numIterations)
        val clusterCenters = clusters.clusterCenters map (_.toArray)
        println("The Cluster Centers are = " + clusterCenters)
        // Evaluate clustering by computing Within Set Sum of Squared Errors
        val WSSSE = clusters.computeCost(parsedData)
        println("Within Set Sum of Squared Errors = " + WSSSE)

【问题讨论】:

【参考方案1】:

据我所知,您应该为每个元素运行 predict。

    KMeansModel clusters = KMeans.train(parsedData.rdd(), numClusters, numIterations);

    List<Vector> vectors = parsedData.collect();
    for(Vector vector: vectors)
        System.out.println("cluster "+clusters.predict(vector) +" "+vector.toString());
    

【讨论】:

以上是关于使用 Spark KMeans 算法打印 ClusterID 及其元素。的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Spark Mllib KMeans 算法非常慢?

如何用mapreduce分布式实现kmeans算法

spark.mllib源码阅读-聚类算法1-KMeans

spark.mllib源码阅读-聚类算法1-KMeans

基于spark的kmeans算法

大数据:Spark mlib KMeans聚类算法源码分析