2016-04-09 19 views
2

Ich möchte Kmeans Etiketten für tun, damit ich später durch die Etiketten gruppieren kann.Kmeans - Gruppe von

Wie wähle ich die Spalten aus, in denen kmeans ausgeführt werden soll?

val clusterThis = scaledDF.select($"id",$"setting1",$"setting2",$"setting3") 

// dataset description lists six operation modes 
val operatingModes = 6 

// Cluster the data into two classes using KMeans 
val numClusters = operatingModes 
val numIterations = 20 

import sqlContext.implicits._ 
val clusters = KMeans.train(clusterThis.rdd, numClusters, numIterations) 
clusters.predict(clusterThis) 

//... join back on id 
+0

Verwenden Sie 'ML' oder' MLLib'? –

+0

Ich könnte jedes verwenden, wenn es verfügbar ist, denke ich, das oben verwendet rdd/MLLib – oluies

+0

Ah ML hat ein großes Beispiel https://spark.apache.org/docs/latest/ml-clustering.html – oluies

Antwort

3

Wie Sie in KMeans's Example das Objekt verwendet nur eine Spalte als features sehen können. In diesem Beispiel hat es zufällig den gleichen Namen. Dieser Name hängt jedoch von Ihnen ab, aber das Wichtigste ist, dass diese Spalte eine Vector (dicht oder spärlich) sein muss.

So müssten Sie kombinieren Ihre Funktionen (verschiedene Spalten) in eine, für diese Aufgabe können Sie eine VectorAssembler verwenden.

By the way, K-Mittel funktioniert nicht mit kategorischen Funktionen. Sie können diesen Beitrag lesen K-means clustering for mixed numeric and categorical data, um die Gründe zu beachten.

+0

Gute Erklärung und danke für die Referenz! :) – eliasah