2016-03-22 7 views
2
benim verilerin özelliklerinden benim küme merkezleri oluşturmuş

Bu Spark kmeans kullanılarak yapıldı 'Kmeans.data.txt' demek Tahmin MLib.Eğer</p> <p><a href="https://github.com/apache/spark/blob/master/data/mllib/kmeans_data.txt" rel="nofollow">https://github.com/apache/spark/blob/master/data/mllib/kmeans_data.txt</a></p> <p>buldukça Spark MLlib kmeans kullanarak verilerden kümeleri

clusters.clusterCenters.foreach(println) 

Bu verilerden türetilen kümelerin nasıl tahmin edileceği hakkında bir fikriniz var mı?

cevap

4

alıntı Scala Spark

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) 
3

Size KmeansModel's documentation okursanız, bunun iki inşaatçı, bunlardan biri olduğunu fark edecektir, oldukça basit:

yeni KMeansModel (clusterCenters: Array [Vektör]) Dolayısıyla

KMeans 'sentroidleri olan bir nesneyi başlatabilirsiniz. Aşağıda bir örnek gösteriyorum. KMean MLlib kümeleme kodundan

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) 
+0

teşekkür alınan snippet'iniz. Verdiğiniz örnekte, tanımladığınız merkezler konusunda net değilim; çünkü KMean modeli ilk önce küme merkezini veri noktalarından belirlemeye yardımcı oluyor ve ardından ayrıştırılan veriler üzerinde kestirimi gerçekleştirirken kümelerin nasıl elde edileceğini sordum. –

+0

Varsayımınız yanlış, 'KMeans' aslında modeli eğiten ve bir' KMeansModel' nesnesini döndüren sınıftır, bu yüzden eğer bir merkez santimetreye sahipseniz, modelini yapıcılarından birini kullanarak başlatabilirsiniz. –

+0

@ user844518 Yani ks sayısını bulmak ister misiniz? Kafam çok karışık. –

İlgili konular