【问题标题】:Predict clusters from data using Spark MLlib KMeans使用 Spark MLlib KMeans 从数据中预测集群
【发布时间】:2016-07-08 19:15:21
【问题描述】:

我已经根据我的数据特征生成了我的集群中心,如您在

中找到的“Kmeans.data.txt”

https://github.com/apache/spark/blob/master/data/mllib/kmeans_data.txt

这是使用 Spark MLib 中的 KMeans 执行的。

clusters.clusterCenters.foreach(println)

知道如何预测从这些数据派生的集群吗?

【问题讨论】:

    标签: apache-spark k-means apache-spark-mllib


    【解决方案1】:

    摘自从Scala Spark检索到的KMean MLlib聚类代码sn-p

    import org.apache.spark.mllib.clustering.KMeans
    import org.apache.spark.mllib.linalg.Vectors
    
    // Load and parse the data
    val data = sc.textFile("data/mllib/kmeans_data.txt")
    val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble)))
    
    // Cluster the data into two classes using KMeans
    val numClusters = 2
    val numIterations = 20
    val clusters = KMeans.train(parsedData, numClusters, numIterations)
    
    // here is what I added to predict data points that are within the clusters
    clusters.predict(parsedData).foreach(println)
    

    【讨论】:

      【解决方案2】:

      很简单,如果你阅读KmeansModel's documentation,你会注意到它有两个构造函数,其中之一:

      新的 KMeansModel(clusterCenters: Array[Vector])

      因此,您可以实例化一个具有KMeans' 质心的对象。我在下面展示一个例子。

      import org.apache.spark.mllib.clustering.KMeansModel
      import org.apache.spark.mllib.linalg.Vectors
      
      val rdd = sc.parallelize(List(
        Vectors.dense(Array(-0.1, 0.0, 0.0)), 
        Vectors.dense(Array(9.0, 9.0, 9.0)), 
        Vectors.dense(Array(3.0, 2.0, 1.0))))
      
      val centroids = Array(
        Vectors.dense(Array(0.0, 0.0, 0.0)), 
        Vectors.dense(Array(0.1, 0.1, 0.1)),
        Vectors.dense(Array(0.2, 0.2, 0.2)),
        Vectors.dense(Array(9.0, 9.0, 9.0)),
        Vectors.dense(Array(9.1, 9.1, 9.1)),
        Vectors.dense(Array(9.2, 9.2, 9.2)))
      
      val model = new KMeansModel(clusterCenters=centroids)
      
      model.predict(rdd).take(10)
      
      // res13: Array[Int] = Array(0, 3, 2)
      

      【讨论】:

      • 谢谢。在您给出的示例中,我不清楚您定义的质心,因为 KMean 模型有助于首先从数据点确定聚类中心,然后我询问了如何在对解析的数据执行预测时获取聚类。
      • 您的假设不正确,KMeans 是实际训练模型并返回 KMeansModel 对象的类,因此如果您已经拥有质心,则可以使用其构造函数之一实例化模型.
      • @user844518 我的意思是你想找到ks的数量吗?我很困惑。
      猜你喜欢
      • 2017-05-25
      • 2016-10-04
      • 2016-11-09
      • 2016-07-20
      • 2015-10-01
      • 2018-06-12
      • 2021-08-16
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多