使用Spark MLlib KMeans预测数据的聚类。

5
2个回答

5

以下是从Scala Spark检索到的KMean MLlib聚类代码片段摘录:

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)

4
很简单,如果您阅读KmeansModel文档,您将会注意到它有两个构造函数,其中之一是:

new 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模型首先帮助确定数据点的聚类中心,然后我询问如何在对解析数据进行预测时获取聚类。 - Taiwotman
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Alberto Bonsanto
@user844518 我的意思是你想找到k的数量吗?我很困惑。 - Alberto Bonsanto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接