2017-04-03 3 views
0

Ich habe ein Punkt-Dataset mit zwei Attributen, und ich möchte diese Punkte basierend auf den Attributwerten clustern. Ich möchte K Clustering verwenden, aber ich bin unsicher, wie meine Eingabedaten aussehen sollten, wenn ich Scipys Implementierung verwende.Dateneingabe für K bedeutet Clustering mit Scipy, Python?

Zum Beispiel sollte ich ein numpy Array mit jeder Zeile machen, die enthält: FID, Attribut 1, Attribut 2, X-Koord, Y-Koord oder ein Array nur der Attributwerte? Die Attribute sind Ganzzahlen und Gleitkommazahlen.

+0

sind die x- und y-Positionen relevant für die Cluster? I.e. ist die Position der Punkte, die Sie für das Clustering berücksichtigen möchten? Oder nur die Attributwerte? – hildensia

+0

hauptsächlich die Attributwerte, da die Punktdaten bereits aggregiert sind und ich zu Stichprobenzwecken unabhängig von der Position clustern möchte. – Tins

Antwort

0

Jede Zeile in Ihren Daten sollte diskrete Beobachtungen sein und Spalten sollten mit Merkmalen oder Dimensionen Ihrer Daten übereinstimmen. Für Ihren Fall: FID, Attribut 1, Attribut 2, x-Koord, y-Koord sollten auf Spalten stehen und jede Zeile sollte Beobachtungen zu verschiedenen Zeitschritten darstellen.

from scipy.cluster.vq import kmeans,vq 
nbStates = 4 
Centers, _ = kmeans(Data, nbStates) 
Data_id, _ = vq(Data, Centers) 

wo Daten sollten nx5 Matrix sein, wo 5 Spalten auf Ihre 5 Eigenschaften FID, Attribut 1, Attribut 2, X-Koord, Y-Koord und N Zeilen entsprechend N Beobachtungen entsprechen. Mit anderen Worten, formatieren Sie Ihr FID-Datenarray als Spaltenvektor und dasselbe für andere Features, und verketten Sie sie horizontal und fügen Sie sie als Argument für die kmeans-Funktion ein. nbStates gibt die Anzahl der Cluster an, die Sie erwarten, sollte vorher eingerichtet werden. Was Sie als Ergebnis erhalten werden, ist Centers, das eine NxM-Matrix ist, wobei N Clustern entspricht und M der Anzahl der Features in Ihren Daten entspricht. Data_id-Matrix ist ein Spaltenvektor, der die Beschriftungen Ihrer Datenpunkte entsprechend jedem Cluster darstellt. Es ist Nx1-Matrix, wobei N eine Anzahl von Datenpunkten ist.

0

Wenn Sie nur auf die Attribute clustern möchten, sollten Sie eine 2xN Matrix erstellen (gemäß scipy docs), mit Ihren Attributen als Spalten und jedem Datenpunkt als Zeile.

Sie werden wahrscheinlich Ihre Ergebnisse verbessern, indem Sie die Datenpunkte aufhellen (normalisieren). Angenommen, Ihre Daten haben zwei Felder attr1 und attr2 und Sie haben eine Liste dataset sie den entsprechenden Code enthält whould wie folgt aussehen:

from scipy.cluster.vq import kmeans, whiten 

data = np.ndarray((2, len(dataset)) 
for row, d in enumerate(dataset): 
    data[0, row] = d.attr1 
    data[1, row] = d.attr2 

whitened_data = np.whiten(data) 

clusters, _ = scipy.cluster.vq.kmeans(data, 5) # 5 is the number of clusters you assume 
assignments, _ = vq(data, clusters) 
Verwandte Themen