Frage

Ich bin für Python-Implementierung von k-Means-Algorithmus mit Beispielen zu Cluster und cachen meine Datenbank von Koordinaten.

War es hilfreich?

Lösung

Scipy des Clustering Implementierungen funktionieren gut, und sie umfassen eine k-means Umsetzung.

Es gibt auch scipy-Cluster , die angehäufte Bündelung tut; ths hat den Vorteil, dass Sie sich auf die Anzahl der Cluster vor der Zeit nicht entscheiden müssen.

Andere Tipps

kmeans2 () einige numerische Probleme hat: andere haben Fehlermeldungen gemeldet wie „Matrix nicht positiv ist definitive -. Cholesky-Zerlegung 0.6.0, und ich begegnete in der Version 0.7.1 wird nicht berechnet“in der Version nur die gleichen

Im Moment würde ich empfehlen die Verwendung von PyCluster statt. Beispiel für die Verwendung:

>>> import numpy
>>> import Pycluster
>>> points = numpy.vstack([numpy.random.multivariate_normal(mean, 
                                                            0.03 * numpy.diag([1,1]),
                                                            20) 
                           for mean in [(1, 1), (2, 4), (3, 2)]])
>>> labels, error, nfound = Pycluster.kcluster(points, 3)
>>> labels  # Cluster number for each point
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], dtype=int32)
>>> error   # The within-cluster sum of distances for the solution
1.7721661785401261
>>> nfound  # Number of times this solution was found
1

Für kontinuierliche Daten, k-means ist sehr einfach.

Sie müssen eine Liste der Mittel, und für jeden Datenpunkt finden die mittlere seine Nähe zu und im Durchschnitt der neuen Datenpunkt zu. Ihre Mittel, um die letzten ausgeprägten Cluster von Punkten in den Eingangsdaten darstellen.

ich tun, um die Mittelung kontinuierlich, so dass es keine Notwendigkeit, die alten Daten zu haben, den neuen Mittelwert zu erhalten. Angesichts der alten Durchschnitt k, den nächsten Datenpunkt x und eine konstante n, die die Anzahl der letzten Datenpunkte ist, die durchschnittlich zu halten, ist der neue Mittelwert

k*(1-(1/n)) + n*(1/n)

Hier ist der vollständige Code in Python

from __future__ import division
from random import random

# init means and data to random values
# use real data in your code
means = [random() for i in range(10)]
data = [random() for i in range(1000)]

param = 0.01 # bigger numbers make the means change faster
# must be between 0 and 1

for x in data:
    closest_k = 0;
    smallest_error = 9999; # this should really be positive infinity
    for k in enumerate(means):
        error = abs(x-k[1])
        if error < smallest_error:
            smallest_error = error
            closest_k = k[0]
        means[closest_k] = means[closest_k]*(1-param) + x*(param)

Sie könnten nur die Mittel drucken, wenn alle Daten durchlaufen hat, aber sein viel mehr Spaß macht es in Echtzeit ändern zu beobachten. Ich habe diese auf der Frequenz Umschläge von 20ms Bits von Ton und nach einer Minute zu reden oder zwei, es hatte konsistente Kategorien für die kurzen ‚a‘ Vokal, die lange ‚o‘ Vokal und die ‚s‘ Konsonanten. wierd!

wikipedia , könnten Sie scipy K-Means-Algorithmus eine Vektorquantisierung

Oder könnten Sie ein Python-Wrapper für OpenCV verwenden, ctypes-opencv .

oder Sie könnten OpenCV die neue Python-Schnittstelle und ihre KMeans Umsetzung.

(Jahre später) diese kmeans.py unter ist-es-möglich-zu-geben-your-own-Distanz-Funktion-using-scikits-lernen-k-means einfach ist und relativ schnell; verwendet es für jede der 20-ungerade Metriken in scipy.spatial.distance.

Sie können auch verwenden GDAL, die viele viele Funktionen zur Arbeit mit räumlichen Daten haben.

SciKit das Lernen KMeans () ist die einfachste Art und Weise k-Mittel-Cluster in Python anzuwenden. Montage Cluster ist einfach wie: kmeans = KMeans(n_clusters=2, random_state=0).fit(X).

Dieser Code-Schnipsel zeigt, wie Schwerpunktkoordinaten speichern und vorhersagen Cluster für eine Reihe von Koordinaten.

>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [4, 2], [4, 4], [4, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
>>> kmeans.labels_
array([0, 0, 0, 1, 1, 1], dtype=int32)
>>> kmeans.predict([[0, 0], [4, 4]])
array([0, 1], dtype=int32)
>>> kmeans.cluster_centers_
array([[ 1.,  2.],
       [ 4.,  2.]])

(mit freundlicher Genehmigung von SciKit Dokumentation Erfahren Sie, oben verlinkten)

Pythons Pycluster und pyplot für k-Mittel verwendet werden, Clustering und zur Visualisierung von 2D-Daten. Eine aktuelle Blog-Post Lager Preis / Volumen Analyse mit Python und PyCluster gibt ein Beispiel für Clustering PyCluster auf Bestandsdaten verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top