DBSCAN#

class sklearn.cluster.DBSCAN(eps=0.5, *, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)[Quelle]#

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

DBSCAN - Dichte-basierte räumliche Clusterbildung von Anwendungen mit Rauschen. Findet Kernstichproben mit hoher Dichte und erweitert Cluster von ihnen aus. Dieser Algorithmus eignet sich besonders gut für Daten, die Cluster ähnlicher Dichte enthalten, und kann Cluster beliebiger Form finden.

Im Gegensatz zu K-Means erfordert DBSCAN nicht die Angabe der Anzahl der Cluster im Voraus und kann Ausreißer als Rauschpunkte identifizieren.

Diese Implementierung hat eine Speicherkomplexität im Worst Case von \(O({n}^2)\), die auftreten kann, wenn der Parameter eps groß und min_samples klein ist, während das ursprüngliche DBSCAN nur linearen Speicher verwendet. Weitere Details finden Sie in den Hinweisen unten.

Lesen Sie mehr im Benutzerhandbuch.

Parameter:
epsfloat, Standard=0.5

Der maximale Abstand zwischen zwei Stichproben, damit eine als Nachbar der anderen betrachtet wird. Dies ist keine Obergrenze für die Abstände von Punkten innerhalb eines Clusters. Dies ist der wichtigste Parameter von DBSCAN, der für Ihren Datensatz und Ihre Distanzfunktion richtig gewählt werden muss. Kleinere Werte führen im Allgemeinen zu mehr Clustern.

min_samplesint, Standard=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. Wenn min_samples auf einen höheren Wert gesetzt wird, findet DBSCAN dichtere Cluster, während bei einem niedrigeren Wert die gefundenen Cluster spärlicher sind.

metricstr, oder aufrufbar, Standard=’euclidean’

Die Metrik, die bei der Berechnung des Abstands 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 quadratisch sein. X kann ein spärlicher Graph sein, in diesem Fall dürfen nur "nonzero" Elemente als Nachbarn für DBSCAN berücksichtigt werden.

Hinzugefügt in Version 0.17: metric precomputed zur Annahme von vorberechneten spärlichen Matrizen.

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 werden soll, um punktweise Abstände 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. Siehe die Dokumentation zu NearestNeighbors für Details.

leaf_sizeint, Standard=30

Blattgröße, die an BallTree oder cKDTree übergeben wird. Dies kann die Geschwindigkeit der Konstruktion und Abfrage sowie den für die Speicherung des Baumes erforderlichen Speicher beeinflussen. Der optimale Wert hängt von der Natur des Problems ab.

pfloat, Standard=None

Die Potenz der Minkowski-Metrik, die zur Berechnung des Abstands zwischen Punkten verwendet werden soll. Wenn None, dann p=2 (entspricht dem Euklidischen Abstand). Wenn p=1, entspricht dies dem Manhattan-Abstand.

n_jobsint, default=None

Die Anzahl der parallelen Jobs, die ausgeführt werden sollen. None bedeutet 1, es sei denn, Sie befinden sich in einem joblib.parallel_backend-Kontext. -1 bedeutet die Verwendung aller Prozessoren. Siehe Glossar für weitere Details.

Attribute:
core_sample_indices_ndarray der Form (n_core_samples,)

Indizes der Kernstichproben.

components_ndarray der Form (n_core_samples, n_features)

Kopie jeder vom Training gefundenen Kernstichprobe.

labels_ndarray der Form (n_samples,)

Cluster-Beschriftungen für jeden Punkt im an fit übergebenen Datensatz. Rauschstichproben erhalten die Beschriftung -1. Nicht-negative ganze Zahlen geben die Cluster-Mitgliedschaft an.

n_features_in_int

Anzahl der während des fits gesehenen Merkmale.

Hinzugefügt in Version 0.24.

feature_names_in_ndarray mit Form (n_features_in_,)

Namen der während fit gesehenen Merkmale. Nur definiert, wenn X Merkmalnamen hat, die alle Zeichenketten sind.

Hinzugefügt in Version 1.0.

Siehe auch

OPTICS

Eine ähnliche Clusterbildung bei mehreren Werten von eps. Unsere Implementierung ist auf Speicherverbrauch optimiert.

Anmerkungen

Diese Implementierung führt alle Nachbarschaftsabfragen gebündelt durch, 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. Sie kann eine höhere Speicherkomplexität bei der Abfrage dieser nächsten Nachbarschaften aufweisen, abhängig vom algorithm.

Eine Möglichkeit, die Abfragekomplexität zu vermeiden, ist die Vorab-Berechnung spärlicher Nachbarschaften in Blöcken mithilfe von NearestNeighbors.radius_neighbors_graph mit mode='distance' und anschließender Verwendung von metric='precomputed' hier.

Eine weitere Möglichkeit, Speicher und Berechnungszeit zu reduzieren, ist das Entfernen von (nahezu) doppelten Punkten und die Verwendung von sample_weight anstelle dessen.

OPTICS bietet eine ähnliche Clusterbildung 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
>>> import numpy as np
>>> X = np.array([[1, 2], [2, 2], [2, 3],
...               [8, 7], [8, 8], [25, 80]])
>>> clustering = DBSCAN(eps=3, min_samples=2).fit(X)
>>> clustering.labels_
array([ 0,  0,  0,  1,  1, -1])
>>> clustering
DBSCAN(eps=3, min_samples=2)

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

Einen Vergleich von DBSCAN mit anderen Clustering-Algorithmen finden Sie unter Vergleich verschiedener Clustering-Algorithmen auf einfachen Datensätzen

fit(X, y=None, sample_weight=None)[Quelle]#

Führen Sie die DBSCAN-Clusterbildung aus Merkmalen oder einer Distanzmatrix durch.

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

Trainingsinstanzen zum Clustern oder Abstände zwischen Instanzen, wenn metric='precomputed' ist. Wenn eine spärliche Matrix bereitgestellt wird, wird sie in eine spärliche csr_matrix konvertiert.

yIgnoriert

Nicht verwendet, hier zur API-Konsistenz durch Konvention vorhanden.

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

Gewicht jeder Stichprobe, so dass eine Stichprobe mit einem Gewicht von mindestens min_samples selbst eine Kernstichprobe ist; eine Stichprobe mit negativem Gewicht kann verhindern, dass ihr epsilon-Nachbar ein Kernpunkt wird. Beachten Sie, dass Gewichte absolut sind und standardmäßig 1 betragen.

Gibt zurück:
selfobject

Gibt eine angepasste Instanz von self zurück.

fit_predict(X, y=None, sample_weight=None)[Quelle]#

Cluster aus einer Daten- oder Distanzmatrix berechnen und Beschriftungen vorhersagen.

Diese Methode passt das Modell an und gibt die Cluster-Beschriftungen in einem Schritt zurück. Sie ist äquivalent zum Aufruf von fit(X).labels_.

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

Trainingsinstanzen zum Clustern oder Abstände zwischen Instanzen, wenn metric='precomputed' ist. Wenn eine spärliche Matrix bereitgestellt wird, wird sie in eine spärliche csr_matrix konvertiert.

yIgnoriert

Nicht verwendet, hier zur API-Konsistenz durch Konvention vorhanden.

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

Gewicht jeder Stichprobe, so dass eine Stichprobe mit einem Gewicht von mindestens min_samples selbst eine Kernstichprobe ist; eine Stichprobe mit negativem Gewicht kann verhindern, dass ihr epsilon-Nachbar ein Kernpunkt wird. Beachten Sie, dass Gewichte absolut sind und standardmäßig 1 betragen.

Gibt zurück:
labelsndarray der Form (n_samples,)

Cluster-Beschriftungen. Rauschstichproben erhalten die Beschriftung -1. Nicht-negative ganze Zahlen geben die Cluster-Mitgliedschaft an.

get_metadata_routing()[Quelle]#

Holt das Metadaten-Routing dieses Objekts.

Bitte prüfen Sie im Benutzerhandbuch, wie der Routing-Mechanismus funktioniert.

Gibt zurück:
routingMetadataRequest

Ein MetadataRequest, der Routing-Informationen kapselt.

get_params(deep=True)[Quelle]#

Holt Parameter für diesen Schätzer.

Parameter:
deepbool, default=True

Wenn True, werden die Parameter für diesen Schätzer und die enthaltenen Unterobjekte, die Schätzer sind, zurückgegeben.

Gibt zurück:
paramsdict

Parameternamen, zugeordnet ihren Werten.

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') DBSCAN[Quelle]#

Konfiguriert, ob Metadaten für die fit-Methode angefordert werden sollen.

Beachten Sie, dass diese Methode nur relevant ist, wenn dieser Schätzer als Unter-Schätzer innerhalb eines Meta-Schätzers verwendet wird und Metadaten-Routing mit enable_metadata_routing=True aktiviert ist (siehe sklearn.set_config). Bitte lesen Sie das Benutzerhandbuch, um zu erfahren, wie der Routing-Mechanismus funktioniert.

Die Optionen für jeden Parameter sind

  • True: Metadaten werden angefordert und, falls vorhanden, an fit übergeben. Die Anforderung wird ignoriert, wenn keine Metadaten vorhanden sind.

  • False: Metadaten werden nicht angefordert und der Meta-Schätzer übergibt sie nicht an fit.

  • None: Metadaten werden nicht angefordert und der Meta-Schätzer löst einen Fehler aus, wenn der Benutzer sie bereitstellt.

  • str: Metadaten sollten mit diesem Alias an den Meta-Schätzer übergeben werden und nicht mit dem ursprünglichen Namen.

Der Standardwert (sklearn.utils.metadata_routing.UNCHANGED) behält die bestehende Anforderung bei. Dies ermöglicht es Ihnen, die Anforderung für einige Parameter zu ändern und für andere nicht.

Hinzugefügt in Version 1.3.

Parameter:
sample_weightstr, True, False, oder None, Standardwert=sklearn.utils.metadata_routing.UNCHANGED

Metadaten-Routing für den Parameter sample_weight in fit.

Gibt zurück:
selfobject

Das aktualisierte Objekt.

set_params(**params)[Quelle]#

Setzt die Parameter dieses Schätzers.

Die Methode funktioniert sowohl bei einfachen Schätzern als auch bei verschachtelten Objekten (wie Pipeline). Letztere haben Parameter der Form <component>__<parameter>, so dass es möglich ist, jede Komponente eines verschachtelten Objekts zu aktualisieren.

Parameter:
**paramsdict

Schätzer-Parameter.

Gibt zurück:
selfestimator instance

Schätzer-Instanz.