{"id":168400,"date":"2023-04-29T22:55:57","date_gmt":"2023-04-29T21:55:57","guid":{"rendered":"https:\/\/liora.io\/de\/?p=168400"},"modified":"2026-02-25T11:21:24","modified_gmt":"2026-02-25T10:21:24","slug":"machine-learning-clustering","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/machine-learning-clustering","title":{"rendered":"Machine Learning &amp; Clustering: Fokus auf den DBSCAN Algorithmus"},"content":{"rendered":"<p><strong>Clustering ist eine besondere Disziplin des Machine Learning, mit dem Ziel deine Daten in homogene Gruppen mit gemeinsamen Merkmalen aufzuteilen. Ein im Marketing sehr gesch\u00e4tztes Anwendungsgebiet, zum Beispiel dort, wo oft  Kundenst\u00e4mme zu segmentieren, um bestimmte Verhaltensweisen zu erkennen.<\/strong><\/p>\nIn den vorherigen Artikeln haben wir dir zwei Clustering Algorithmen erkl\u00e4rt: clustering : <a href=\"https:\/\/liora.io\/de\/was-ist-k-means\">K-means<\/a> und <a href=\"https:\/\/liora.io\/de\/machine-learning-clustering-fokus-auf-den-cah-algorithmus\">CAH Algorithmus- hieraschische aufsteigende Klassifizierung<\/a>.&nbsp;\n\nDeshalb erscheint es uns als wichtig, diesen Lernprozess mit dem DBSCAN fortzusetzen.&nbsp;\n<h3>DBSCAN Algorithmus<\/h3>\nDBSCAN ist ein sehr bekannter un\u00fcberwachter Algorithmus f\u00fcr Clustering. Er wurde 1996 von Martin Ester, Hans-Peter Kriegel, J\u00f6rg Sander und Xiawei Xu vorgeschlagen.\n\nIn diesem Artikel erkl\u00e4ren wir dir, wie er funktioniert und wie es in Python mit Hilfe von Bibliotheken wie <a href=\"https:\/\/scikit-learn.org\/stable\/\">Scikit-Learn<\/a> implementiert werden kann. Die Anwendungsbereiche sind vielf\u00e4ltig: Kartenanalyse, Datenanalyse, Segmentierung eines Bildes&#8230;.\n<h4>Das Prinzip<\/h4>\nWenn Punkte und eine ganze Zahl k gegeben sind, zielt der Algorithmus darauf ab, die Punkte in k homogene und kompakte Gruppen, sogenannte Cluster, zu unterteilen. Schauen wir uns das folgende Beispiel an:\n\n<img decoding=\"async\" width=\"768\" height=\"339\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/DBSCAN1-1.webp\" alt=\"\" loading=\"lazy\">\n\nDBSCAN ist ein einfacher Algorithmus, der Cluster definiert, indem er die Sch\u00e4tzung der lokalen Dichte verwendet. Er kann in vier Schritte unterteilt werden:\n<ul>\n \t<li style=\"font-weight: 400\">F\u00fcr jede Beobachtung schaust du dir die Anzahl der Punkte an, die h\u00f6chstens einen \u03b5-Abstand von ihr entfernt sind. Diesen Bereich nennt man die \u03b5-Nachbarschaft der Beobachtung.<\/li>\n \t<li style=\"font-weight: 400\">Wenn eine Beobachtung mindestens eine bestimmte Anzahl von Nachbarn hat, einschlie\u00dflich sich selbst, wird sie als Kernbeobachtung betrachtet. In diesem Fall wurde eine Beobachtung mit hoher Dichte entdeckt.<\/li>\n \t<li style=\"font-weight: 400\">Alle Beobachtungen in der N\u00e4he einer Core-Beobachtung geh\u00f6ren zu demselben Cluster. Es k\u00f6nnen auch Herzbeobachtungen in unmittelbarer N\u00e4he zueinander sein. Das bedeutet, dass es eine lange Folge von Herzbeobachtungen gibt, die einen einzigen Cluster bilden.<\/li>\n \t<li style=\"font-weight: 400\">Jede Beobachtung, die keine Kernbeobachtung ist und keine Kernbeobachtung in ihrer Nachbarschaft hat, wird als Anomalie betrachtet.<\/li>\n<\/ul>\nDu musst also zwei Informationen festlegen, bevor du den DBSCAN benutzen kannst:\n<blockquote>Wie gro\u00df ist die Entfernung \u03b5, um f\u00fcr jede Beobachtung die \u03b5-Nachbarschaft zu bestimmen? Welche minimale Anzahl von Nachbarn ist notwendig, um eine Beobachtung als Kernbeobachtung zu betrachten?<\/blockquote>\nDiese beiden Informationen werden vom Nutzer frei eingegeben. Im Gegensatz zum k-Mittelwert-Algorithmus oder der hierarchischen aufsteigenden Klassifizierung muss die Anzahl der Cluster nicht vorab festgelegt werden, was den Algorithmus weniger starr macht.\n\nEin weiterer Vorteil von DBSCAN ist, dass es auch mit Ausrei\u00dfern oder Anomalien umgehen kann. In der obigen Abbildung siehst du, dass der Algorithmus drei Hauptcluster ermittelt hat: blau, gr\u00fcn und gelb. Die violett gef\u00e4rbten Punkte sind Anomalien, die vom DBSCAN erkannt wurden. Nat\u00fcrlich kann die Partitionierung je nach dem Wert von \u03b5 und der Anzahl der minimalen Nachbarn variieren.\n<h4>Begriff der Entfernung und Wahl des \u03b5<\/h4>\nIn diesem Algorithmus sind zwei Punkte entscheidend:\n<blockquote>Welche Metrik wird verwendet, um die Entfernung zwischen einer Beobachtung und ihren Nachbarn zu bewerten? was ist das ideale \u03b5?<\/blockquote>\nIn DBSCAN wird normalerweise die euklidische Distanz verwendet, d.h. p = (p1,&#8230;.,pn) und q = (q1,&#8230;.,qn):\n\n<img decoding=\"async\" width=\"768\" height=\"76\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/dbscan2-1.webp\" alt=\"\" loading=\"lazy\">\n\nBei jeder Beobachtung wird, um die Anzahl der Nachbarn in h\u00f6chstens einer Entfernung \u03b5 zu z\u00e4hlen, die euklidische Entfernung zwischen dem Nachbarn und der Beobachtung berechnet und \u00fcberpr\u00fcft, ob diese kleiner als \u03b5 ist.\n\nBleibt nun noch die Frage, wie man das richtige Epsilon ausw\u00e4hlt. Angenommen, wir entscheiden uns in unserem Beispiel daf\u00fcr, den Algorithmus mit verschiedenen Werten von \u03b5 zu testen. Hier ist das Ergebnis :\n\n<img decoding=\"async\" width=\"768\" height=\"276\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/dbscan3-1.webp\" alt=\"\" loading=\"lazy\">\n\nIn allen drei Beispielen ist die minimale Anzahl an Nachbarn immer auf 5 festgelegt.\n<blockquote>Wenn \u03b5 zu klein ist, ist die \u03b5-Nachbarschaft zu gering und alle Beobachtungen im Datensatz werden als Anomalien betrachtet.<\/blockquote>\nDies ist der Fall in der linken Abbildung eps = 0,05.\n<blockquote>Im Gegensatz dazu enth\u00e4lt jede Beobachtung, wenn epsilon zu gro\u00df ist, in ihrer \u03b5-Nachbarschaft alle anderen Beobachtungen des Datensatzes. Folglich erhalten wir nur einen einzigen Cluster. Es ist daher sehr wichtig, das \u03b5 gut zu kalibrieren, um eine qualitativ hochwertige Partitionierung zu erhalten.<\/blockquote>\nEine einfache Methode, um \u03b5 zu optimieren, besteht darin, f\u00fcr jede Beobachtung zu schauen, wie weit ihr n\u00e4chster Nachbar entfernt ist. Dann kannst du einfach ein \u03b5 so festlegen, dass ein &#8222;ausreichend gro\u00dfer&#8220; Anteil der Beobachtungen einen Abstand zum n\u00e4chsten Nachbarn hat, der kleiner als \u03b5 ist. Mit &#8222;ausreichend gro\u00df&#8220; sind 90-95% der Beobachtungen gemeint, die mindestens einen Nachbarn in ihrer \u03b5-Nachbarschaft haben m\u00fcssen.\n<h3>Wie implementiert man DBSCAN mit Python?<\/h3>\nDas Training von DBSCAN wird durch die Scikit-Learn-Bibliothek erleichtert. Unser Datensatz, der als Beispiel diente, l\u00e4sst sich leicht mit der Funktion make_blobs von Scikit-Learn erstellen. Hier ist, wie sie in Code implementiert wird :\n<blockquote>Da wir nun unseren Datensatz haben, werden wir versuchen, das optimale \u03b5 zu bestimmen, um eine bessere Partitionierung unseres Datensatzes zu erreichen.<\/blockquote>\nScikit-Learn stellt eine <a href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.neighbors.NearestNeighbors.html\"> Klasse NearestNeighbors<\/a> zur Verf\u00fcgung, mit der die n\u00e4chsten Nachbarn jeder Beobachtung sowie die Entfernungen ermittelt werden k\u00f6nnen. Hier ist, wie man sie in Code implementiert:\n\nHier ist das Ergebnis:\n\n<img decoding=\"async\" width=\"460\" height=\"309\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/nearestneighbors-1.webp\" alt=\"\" loading=\"lazy\">\n\nWie wir zuvor gesehen haben, werden wir ein \u03b5 so w\u00e4hlen, dass 90% der Beobachtungen einen Abstand zum n\u00e4chsten Nachbarn haben, der kleiner als \u03b5 ist. In unserem Beispiel scheint 0,2 geeignet zu sein.\n\nNun, da wir unser \u03b5 optimiert haben, k\u00f6nnen wir unsere Partitionierung mithilfe von DBSCAN durchf\u00fchren, das bereits in Scikit-Learn implementiert ist.\n\nHier ist das Ergebnis:\n\n<img decoding=\"async\" width=\"453\" height=\"315\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/02\/DBSCAN4-3.webp\" alt=\"\" loading=\"lazy\">\n\nMit den Argumenten eps und min_samples k\u00f6nnen die Parameter des Algorithmus festgelegt werden, n\u00e4mlich der Abstand \u03b5 und die minimale Anzahl von Nachbarn, um als Kernbeobachtung zu gelten.\n\nDer Algorithmus hat also 3 Hauptcluster und einige Anomalien entdeckt. Jede der Beobachtungen wird mit dem Label des entsprechenden Clusters beschriftet (z. B. 0,1,2). Die Anomalien werden mit -1 beschriftet und bilden somit eine eigene Klasse zus\u00e4tzlich zu den 3 entdeckten Clustern.\n\nDie Verwendung eines Clustering-Algorithmus wie DBSCAN ist nicht einfach, je nachdem, welche Daten du hast. Die Daten m\u00fcssen oftmals nachbearbeitet werden.\n\nHat dir diese Serie \u00fcber Clustering gefallen? In den <strong>Liora-Schulungen<\/strong> lernst du, alle wichtigen Clustering-Algorithmen zu beherrschen und sie in Datens\u00e4tzen zu interpretieren.\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/unsere-aus-und-weiterbildungen\">Entdecken Sie die Liora-Schulungen<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Clustering ist eine besondere Disziplin des Machine Learning, mit dem Ziel deine Daten in homogene Gruppen mit gemeinsamen Merkmalen aufzuteilen. Ein im Marketing sehr gesch\u00e4tztes Anwendungsgebiet, zum Beispiel dort, wo oft Kundenst\u00e4mme zu segmentieren, um bestimmte Verhaltensweisen zu erkennen. In den vorherigen Artikeln haben wir dir zwei Clustering Algorithmen erkl\u00e4rt: clustering : K-means und CAH [&hellip;]<\/p>\n","protected":false},"author":47,"featured_media":219715,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2472],"class_list":["post-168400","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ki"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/168400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/47"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=168400"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/168400\/revisions"}],"predecessor-version":[{"id":217580,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/168400\/revisions\/217580"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/219715"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=168400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=168400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}