使用 Spark MLlib KMeans 从数据预测集群
Predict clusters from data using Spark MLlib KMeans
我已经根据我的数据特征生成了我的聚类中心,如您在
中找到的 'Kmeans.data.txt'
https://github.com/apache/spark/blob/master/data/mllib/kmeans_data.txt
这是在 Spark MLib 中使用 KMeans 执行的。
clusters.clusterCenters.foreach(println)
知道如何预测从该数据派生的聚类吗?
它很简单,如果你阅读 KmeansModel's documentation,你会注意到它有两个构造函数,其中之一:
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 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)
我已经根据我的数据特征生成了我的聚类中心,如您在
中找到的 'Kmeans.data.txt'https://github.com/apache/spark/blob/master/data/mllib/kmeans_data.txt
这是在 Spark MLib 中使用 KMeans 执行的。
clusters.clusterCenters.foreach(println)
知道如何预测从该数据派生的聚类吗?
它很简单,如果你阅读 KmeansModel's documentation,你会注意到它有两个构造函数,其中之一:
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)
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)