Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在spark scala的k均值聚类算法中找到聚类距离_Scala_Apache Spark_Cluster Analysis - Fatal编程技术网

如何在spark scala的k均值聚类算法中找到聚类距离

如何在spark scala的k均值聚类算法中找到聚类距离,scala,apache-spark,cluster-analysis,Scala,Apache Spark,Cluster Analysis,我使用spark scala中的k均值算法来训练模型。我想计算集群中每个值到剩余集群的距离。下面是我为训练模型而实现的代码 val Array(trainingData, testData) = df2.randomSplit(Array(0.8, 0.2)) val kmeans = new KMeans() .setK(12) .setFeaturesCol("features") .setPredictionCol("predictio

我使用spark scala中的k均值算法来训练模型。我想计算集群中每个值到剩余集群的距离。下面是我为训练模型而实现的代码


    val Array(trainingData, testData) = df2.randomSplit(Array(0.8, 0.2))
    val kmeans = new KMeans()
      .setK(12)
      .setFeaturesCol("features")
      .setPredictionCol("prediction")
    val kmeansModel = kmeans.fit(trainingData)
    kmeansModel.clusterCenters.foreach(println)

    val predictDf = kmeansModel.transform(testData)
    predictDf.show()


你必须自己计算距离(这很容易做到,所以就这样吧!)

虽然Spark实现的(糟糕的)算法确实有这些距离,但它们目前没有返回。因此,您需要修改Spark以获得它们

更好的算法可以避免计算所有这些距离,从而更快。这就是为什么这些算法比Spark更快,Spark只有劳埃德的朴素算法。但是这些阿克戈里希姆人也将无法归还他们。不过,有些人可能对距离有限制。但是你需要最后一次O(n)传球来计算准确的距离,你通常需要自己来做

当“预测”时(注意,集群通常不是预测性的,大多数集群不会提供“预测”功能,因此也不常进行列车测试拆分,因为它根本不起作用),您也可以自己实现(即,自己编写代码,而不是使用库函数)它。然后,您将获得到所有群集中心的距离。这比以后重新计算距离(即每点k+1距离计算,而不是k)更聪明

最后但并非最不重要的一点是,您可能还对欧几里德距离而不是平方欧几里德距离感兴趣。k-均值不能最小化这些值(它只能最小化Bregman发散,而欧几里德距离不能),但通常差异不会太大。所以不要假设结果是最优的