scipy.cluster.vq.

kmeans2#

scipy.cluster.vq.kmeans2(data, k, iter=10, thresh=1e-05, minit='random', missing='warn', check_finite=True, *, rng=None)[Quelle]#

Klassifiziert eine Menge von Beobachtungen mithilfe des K-Means-Algorithmus in k Cluster.

Der Algorithmus versucht, die euklidische Distanz zwischen Beobachtungen und Zentroiden zu minimieren. Mehrere Initialisierungsmethoden sind enthalten.

Parameter:
datandarray

Ein Array der Größe 'M' mal 'N' von 'M' Beobachtungen in 'N' Dimensionen oder ein Array der Länge 'M' von 1D-Beobachtungen.

kint oder ndarray

Die Anzahl der zu bildenden Cluster sowie die Anzahl der zu generierenden Zentroiden. Wenn die Initialisierungszeichenkette minit 'matrix' ist oder wenn stattdessen ein ndarray angegeben wird, wird dieser als initiale Cluster interpretiert, die verwendet werden sollen.

iterint, optional

Anzahl der Iterationen des K-Means-Algorithmus, die ausgeführt werden sollen. Beachten Sie, dass dies eine andere Bedeutung hat als der Parameter iters für die Funktion kmeans.

threshfloat, optional

(noch nicht verwendet)

minitstr, optional

Methode zur Initialisierung. Verfügbare Methoden sind 'random', 'points', '++' und 'matrix'.

'random': Generiert k Zentroiden aus einer Gaußschen Verteilung mit Mittelwert und Varianz, die aus den Daten geschätzt wurden.

'points': Wählt k Beobachtungen (Zeilen) zufällig aus den Daten für die initialen Zentroiden aus.

'++': Wählt k Beobachtungen entsprechend der K-Means++-Methode aus (sorgfältige Initialisierung).

'matrix': Interpretiert den Parameter k als ein Array von initialen Zentroiden der Größe k mal M (oder ein Array der Länge k für 1D-Daten).

missingstr, optional

Methode zur Behandlung leerer Cluster. Verfügbare Methoden sind 'warn' und 'raise'.

'warn': Gibt eine Warnung aus und fährt fort.

'raise': Löst einen ClusterError aus und beendet den Algorithmus.

check_finitebool, optional

Ob überprüft werden soll, ob die Eingabematrizen nur endliche Zahlen enthalten. Deaktivieren kann die Leistung verbessern, kann aber zu Problemen (Abstürze, Nicht-Terminierung) führen, wenn die Eingaben Unendlichkeiten oder NaNs enthalten. Standard: True

rng{None, int, numpy.random.Generator}, optional

Wenn rng als Schlüsselwort übergeben wird, werden andere Typen als numpy.random.Generator an numpy.random.default_rng übergeben, um einen Generator zu instanziieren. Wenn rng bereits eine Generator-Instanz ist, dann wird die bereitgestellte Instanz verwendet. Geben Sie rng für reproduzierbares Funktionsverhalten an.

Wenn dieses Argument positionsabhängig übergeben wird oder seed als Schlüsselwort übergeben wird, gilt das Legacy-Verhalten für das Argument seed.

  • Wenn seed None ist (oder numpy.random), wird die Singleton-Instanz von numpy.random.RandomState verwendet.

  • Wenn seed eine Ganzzahl ist, wird eine neue RandomState-Instanz mit seed verwendet.

  • Wenn seed bereits eine Generator- oder RandomState-Instanz ist, dann wird diese Instanz verwendet.

Geändert in Version 1.15.0: Als Teil des SPEC-007-Übergangs von der Verwendung von numpy.random.RandomState zu numpy.random.Generator wurde dieser Schlüsselwortparameter von seed in rng geändert. Für eine Übergangszeit werden beide Schlüsselwortparameter weiterhin funktionieren, obwohl nur einer gleichzeitig angegeben werden kann. Nach der Übergangszeit werden Funktionsaufrufe, die den Schlüsselwortparameter seed verwenden, Warnungen ausgeben. Das Verhalten von sowohl seed als auch rng ist oben beschrieben, aber nur der Schlüsselwortparameter rng sollte in neuem Code verwendet werden.

Rückgabe:
centroidndarray

Ein Array der Größe 'k' mal 'N' von Zentroiden, die in der letzten Iteration von K-Means gefunden wurden.

labelndarray

label[i] ist der Code oder Index des Zentroiden, dem die i-te Beobachtung am nächsten liegt.

Siehe auch

kmeans

Hinweise

kmeans2 unterstützt experimentell Python Array API Standard-kompatible Backends zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie die Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy, PyTorch, JAX oder Dask-Arrays als Array-Argumente bereitstellen. Die folgenden Kombinationen von Backend und Gerät (oder anderer Fähigkeit) werden unterstützt.

Bibliothek

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

⚠️ kein JIT

Dask

⚠️ berechnet Graph

n/a

Siehe Unterstützung für den Array API Standard für weitere Informationen.

Referenzen

[1]

D. Arthur und S. Vassilvitskii, „k-means++: the advantages of careful seeding“, Proceedings of the Eighteenth Annual ACM-SIAM Symposium on Discrete Algorithms, 2007.

Beispiele

>>> from scipy.cluster.vq import kmeans2
>>> import matplotlib.pyplot as plt
>>> import numpy as np

Erstellen Sie z, ein Array der Form (100, 2), das eine Mischung von Stichproben aus drei multivariaten Normalverteilungen enthält.

>>> rng = np.random.default_rng()
>>> a = rng.multivariate_normal([0, 6], [[2, 1], [1, 1.5]], size=45)
>>> b = rng.multivariate_normal([2, 0], [[1, -1], [-1, 3]], size=30)
>>> c = rng.multivariate_normal([6, 4], [[5, 0], [0, 1.2]], size=25)
>>> z = np.concatenate((a, b, c))
>>> rng.shuffle(z)

Berechnen Sie drei Cluster.

>>> centroid, label = kmeans2(z, 3, minit='points')
>>> centroid
array([[ 2.22274463, -0.61666946],  # may vary
       [ 0.54069047,  5.86541444],
       [ 6.73846769,  4.01991898]])

Wie viele Punkte befinden sich in jedem Cluster?

>>> counts = np.bincount(label)
>>> counts
array([29, 51, 20])  # may vary

Plotten Sie die Cluster.

>>> w0 = z[label == 0]
>>> w1 = z[label == 1]
>>> w2 = z[label == 2]
>>> plt.plot(w0[:, 0], w0[:, 1], 'o', alpha=0.5, label='cluster 0')
>>> plt.plot(w1[:, 0], w1[:, 1], 'd', alpha=0.5, label='cluster 1')
>>> plt.plot(w2[:, 0], w2[:, 1], 's', alpha=0.5, label='cluster 2')
>>> plt.plot(centroid[:, 0], centroid[:, 1], 'k*', label='centroids')
>>> plt.axis('equal')
>>> plt.legend(shadow=True)
>>> plt.show()
../../_images/scipy-cluster-vq-kmeans2-1.png