Python K-oznacza algorytm

Szukam implementacji Pythonowego algorytmu k-means z przykładami do klastra i buforowania mojej bazy współrzędnych.

Author: Eeyore, 2009-10-09

8 answers

Klastrowanie implementacji Scipy ' ego działa dobrze i zawiera implementację K-oznacza.

Istnieje równieżscipy-cluster , który wykonuje aglomeracyjne klastry; ths ma tę zaletę, że nie trzeba decydować o liczbie klastrów z wyprzedzeniem.

 54
Author: tom10,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-04 22:50:27

Kmeans2 () ma pewne problemy numeryczne: inne mają zgłoszone komunikaty o błędach, takie jak "macierz nie jest dodatnia określona - rozkładu Cholesky nie można obliczyć" w wersji 0.6.0, a ja właśnie spotkałem się z tym samym w wersji 0.7.1.

Na razie polecam użyciePyCluster . Przykład użycia:
>>> 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
 28
Author: Vebjorn Ljosa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-09 03:31:12

Dla danych ciągłych, K-oznacza jest bardzo proste.

Potrzebujesz listy swoich środków i dla każdego punktu danych Znajdź średnią najbliższą i uśrednij nowy punkt danych do niego. twoje środki będą reprezentować Ostatnie istotne skupiska punktów w danych wejściowych.

Robię uśrednianie w sposób ciągły, więc nie ma potrzeby posiadania starych danych, aby uzyskać nową średnią. Biorąc pod uwagę starą średnią k, następny punkt danych x i stałą n, która jest liczbą przeszłych punktów danych do zachowaj średnią z, nowa średnia to

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

Oto Pełny kod w Pythonie

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)

Możesz po prostu wydrukować środki, gdy wszystkie dane zostaną przepuszczone, ale oglądanie ich zmian w czasie rzeczywistym jest o wiele przyjemniejsze. Użyłem tego na kopercie częstotliwości 20ms bitów dźwięku i po rozmowie z nim przez minutę lub dwie, miał spójne kategorie dla krótkiej samogłoski "a", długiej samogłoski " o "i spółgłoski "s". dziwne!

 20
Author: Nathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-09 05:21:50

Z Wikipedii, można użyć scypy, K-oznacza klastrowanie kwantyzacji wektorowej

OpenCV może być używany w języku Python, ctypes-opencv.

Lub mógłbyś Nowy interfejs OpenCV w Pythonie i ich implementację kmeans .

 5
Author: Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-09 19:26:39

(Years later) this kmeans.py Pod is-it-possible-to-specific-your-own-distance-function-using-scikits-learn-k-means jest proste i dość szybkie; używa dowolnej z 20-nieparzystych metryk w scipy.przestrzenne.odległość.

 5
Author: denis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:34

Można również użyć GDAL, który posiada wiele funkcji do pracy z danymi przestrzennymi.

 0
Author: George Silva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-09 19:35:19

SciKit Learn ' s KMeans () jest najprostszym sposobem zastosowania k-means clustering w Pythonie. Montaż klastrów jest prosty jak: kmeans = KMeans(n_clusters=2, random_state=0).fit(X).

Ten fragment kodu pokazuje, jak przechowywać współrzędne centroidowe i przewidywać klastry dla tablicy współrzędnych.

>>> 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.]])

(dzięki uprzejmości dokumentacji SciKit Learn, podlinkowanej powyżej)

 0
Author: gsilv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-12 12:45:48

Pycluster i pypllot w Pythonie mogą być używane do klastrowania k-means oraz do wizualizacji danych 2D. Ostatni post na blogu Analiza ceny/wolumenu akcji za pomocą Pythona i PyCluster daje przykład klastrowania za pomocą PyCluster na danych giełdowych.

 -1
Author: Guest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-14 20:52:51