dbscan#

sklearn.cluster.dbscan(X, eps=0.5, *, min_samples=5, metric='minkowski', metric_params=None, algorithm='auto', leaf_size=30, p=2, sample_weight=None, n_jobs=None)[Quelle]#

Führt DBSCAN-Clustering aus einer Vektor- oder Distanzmatrix durch.

Diese Funktion ist ein Wrapper um DBSCAN, geeignet für schnelle, eigenständige Clustering-Aufgaben. Für arbeitsablaufbasierte Ansätze, bei denen Klassifikatorattribute oder Pipeline-Integration erforderlich sind, ist DBSCAN zu bevorzugen.

DBSCAN (Density-Based Spatial Clustering of Applications with Noise) ist ein dichte-basierter Clustering-Algorithmus, der eng beieinander liegende Punkte gruppiert und gleichzeitig Punkte in Regionen mit geringer Dichte als Ausreißer markiert.

Lesen Sie mehr im Benutzerhandbuch.

Parameter:
X{array-like, scipy sparse matrix} von Form (n_samples, n_features) oder (n_samples, n_samples)

Ein Merkmalsarray oder ein Array von Distanzen zwischen Stichproben, wenn metric='precomputed'. Bei Verwendung von vorberechneten Distanzen muss X eine quadratische symmetrische Matrix sein.

epsfloat, default=0.5

Die maximale Distanz zwischen zwei Stichproben, damit eine als Nachbarschaft der anderen betrachtet wird. Dies ist keine maximale Grenze für die Distanzen von Punkten innerhalb eines Clusters. Dies ist der wichtigste Parameter von DBSCAN, der für Ihren Datensatz und Ihre Distanzfunktion angemessen gewählt werden muss. Kleinere Werte ergeben mehr Cluster, während größere Werte weniger, größere Cluster ergeben.

min_samplesint, default=5

Die Anzahl der Stichproben (oder das Gesamtgewicht) in einer Nachbarschaft, damit ein Punkt als Kernpunkt betrachtet wird. Dies schließt den Punkt selbst ein. Höhere Werte ergeben weniger, dichtere Cluster, während niedrigere Werte mehr, spärlichere Cluster ergeben.

metricstr oder aufrufbar, Standard=’minkowski’

Die Metrik, die beim Berechnen der Distanz zwischen Instanzen in einem Merkmalsarray verwendet werden soll. Wenn metric ein String oder aufrufbar ist, muss es eine der Optionen sein, die von sklearn.metrics.pairwise_distances für seinen metric-Parameter zulässig sind. Wenn metric „precomputed“ ist, wird X als Distanzmatrix angenommen und muss während fit quadratisch sein. X kann ein Sparse Graph sein, in diesem Fall können nur „nonzero“-Elemente als Nachbarn betrachtet werden.

metric_paramsdict, Standard=None

Zusätzliche Schlüsselwortargumente für die Metrikfunktion.

Hinzugefügt in Version 0.19.

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, Standard=’auto’

Der Algorithmus, der vom NearestNeighbors-Modul verwendet wird, um punktweise Distanzen zu berechnen und die nächsten Nachbarn zu finden. „auto“ versucht, den am besten geeigneten Algorithmus basierend auf den an die fit Methode übergebenen Werten zu bestimmen. Einzelheiten finden Sie in der Dokumentation von NearestNeighbors.

leaf_sizeint, Standard=30

Die an BallTree oder cKDTree übergebene Blattgröße. Dies kann die Geschwindigkeit der Erstellung und Abfrage sowie den benötigten Speicher für die Speicherung des Baums beeinflussen. Der optimale Wert hängt von der Art des Problems ab. Im Allgemeinen führen kleinere Blattgrößen zu schnelleren Abfragen, aber langsamerer Erstellung.

pfloat, Standard=2

Potenzparameter für die Minkowski-Metrik. Wenn p = 1, ist dies äquivalent zur Verwendung der Manhattan-Distanz (l1) und der Euklidischen Distanz (l2) für p = 2. Für beliebiges p wird die Minkowski-Distanz (l_p) verwendet. Dieser Parameter muss positiv sein.

sample_weightarray-like der Form (n_samples,), Standardwert=None

Gewicht jeder Stichprobe, so dass eine Stichprobe mit einem Gewicht von mindestens min_samples für sich allein eine Kernstichprobe ist; eine Stichprobe mit negativem Gewicht kann verhindern, dass ihr eps-Nachbar ein Kernpunkt ist. Beachten Sie, dass Gewichte absolut sind und standardmäßig 1 sind.

n_jobsint, default=None

Die Anzahl der parallelen Jobs, die für die Nachbarschaftssuche ausgeführt werden. None bedeutet 1, es sei denn, es befindet sich in einem joblib.parallel_backend Kontext. -1 bedeutet die Verwendung aller Prozessoren. Weitere Details finden Sie im Glossar. Wenn vorberechnete Distanzen verwendet werden, ist die parallele Ausführung nicht verfügbar und somit hat n_jobs keine Auswirkungen.

Gibt zurück:
core_samplesndarray von Form (n_core_samples,)

Indizes der Kernpunkte.

labelsndarray der Form (n_samples,)

Cluster-Labels für jeden Punkt. Rauschpunkte erhalten das Label -1. Nicht-negative ganze Zahlen zeigen die Cluster-Zugehörigkeit an.

Siehe auch

DBSCAN

Eine Estimator-Schnittstelle für diesen Clustering-Algorithmus.

OPTICS

Eine ähnliche Estimator-Schnittstelle, die auf mehreren eps-Werten clustert. Unsere Implementierung ist für die Speichernutzung optimiert.

Anmerkungen

Ein Beispiel finden Sie unter Demo des DBSCAN-Clustering-Algorithmus.

Diese Implementierung berechnet alle Nachbarschaftsabfragen in großen Mengen, was die Speicherkomplexität auf O(n.d) erhöht, wobei d die durchschnittliche Anzahl von Nachbarn ist, während das ursprüngliche DBSCAN eine Speicherkomplexität von O(n) hatte. Es kann eine höhere Speicherkomplexität beim Abfragen dieser nächsten Nachbarschaften aufweisen, abhängig vom algorithm.

Ein Weg, die Abfragekomplexität zu vermeiden, ist das Vorberechnen spärlicher Nachbarschaften in Chunks mit NearestNeighbors.radius_neighbors_graph mit mode='distance' und dann die Verwendung von metric='precomputed' hier.

Ein weiterer Weg, den Speicher und die Rechenzeit zu reduzieren, ist das Entfernen von (nahezu) doppelten Punkten und die Verwendung von sample_weight stattdessen.

OPTICS bietet ein ähnliches Clustering mit geringerem Speicherverbrauch.

Referenzen

Ester, M., H. P. Kriegel, J. Sander und X. Xu, „A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise“. In: Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining, Portland, OR, AAAI Press, S. 226-231. 1996

Schubert, E., Sander, J., Ester, M., Kriegel, H. P. & Xu, X. (2017). „DBSCAN revisited, revisited: why and how you should (still) use DBSCAN.“ ACM Transactions on Database Systems (TODS), 42(3), 19.

Beispiele

>>> from sklearn.cluster import dbscan
>>> X = [[1, 2], [2, 2], [2, 3], [8, 7], [8, 8], [25, 80]]
>>> core_samples, labels = dbscan(X, eps=3, min_samples=2)
>>> core_samples
array([0, 1, 2, 3, 4])
>>> labels
array([ 0,  0,  0,  1,  1, -1])