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.Generatorannumpy.random.default_rngübergeben, um einenGeneratorzu instanziieren. Wenn rng bereits eineGenerator-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 vonnumpy.random.RandomStateverwendet.Wenn seed eine Ganzzahl ist, wird eine neue
RandomState-Instanz mit seed verwendet.Wenn seed bereits eine
Generator- oderRandomState-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.RandomStatezunumpy.random.Generatorwurde 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
Hinweise
kmeans2unterstützt experimentell Python Array API Standard-kompatible Backends zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie die UmgebungsvariableSCIPY_ARRAY_API=1setzen 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()