Sie können hierarchisches Clustering verwenden . Es ist ein ziemlich grundlegender Ansatz, daher stehen viele Implementierungen zur Verfügung. Es ist zum Beispiel in Pythons Scipy enthalten .
Siehe zum Beispiel das folgende Skript:
import matplotlib.pyplot as plt
import numpy
import scipy.cluster.hierarchy as hcluster
N=100
data = numpy.random.randn(3*N,2)
data[:N] += 5
data[-N:] += 10
data[-1:] -= 20
thresh = 1.5
clusters = hcluster.fclusterdata(data, thresh, criterion="distance")
plt.scatter(*numpy.transpose(data), c=clusters)
plt.axis("equal")
title = "threshold: %f, number of clusters: %d" % (thresh, len(set(clusters)))
plt.title(title)
plt.show()
Dies führt zu einem ähnlichen Ergebnis wie im folgenden Bild.
Der als Parameter angegebene Schwellenwert ist ein Abstandswert, auf dessen Grundlage entschieden wird, ob Punkte / Cluster zu einem anderen Cluster zusammengeführt werden. Die verwendete Abstandsmetrik kann ebenfalls angegeben werden.
Beachten Sie, dass es verschiedene Methoden gibt, um die Ähnlichkeit zwischen und innerhalb des Clusters zu berechnen, z. B. Abstand zwischen den nächstgelegenen Punkten, Abstand zwischen den am weitesten entfernten Punkten, Abstand zu den Clusterzentren usw. Einige dieser Methoden werden auch vom hierarchischen Clustering-Modul von scipys unterstützt ( einzelne / vollständige / durchschnittliche ... Verknüpfung ). Laut Ihrem Beitrag möchten Sie eine vollständige Verknüpfung verwenden .
Beachten Sie, dass dieser Ansatz auch kleine (Einzelpunkt-) Cluster zulässt, wenn sie das Ähnlichkeitskriterium der anderen Cluster, dh den Abstandsschwellenwert, nicht erfüllen.
Es gibt andere Algorithmen, die eine bessere Leistung erzielen und in Situationen mit vielen Datenpunkten relevant werden. Wie andere Antworten / Kommentare vermuten lassen, sollten Sie sich auch den DBSCAN-Algorithmus ansehen:
Einen guten Überblick über diese und andere Clustering-Algorithmen finden Sie auch auf dieser Demoseite (der Python-Bibliothek zum Scikit-Lernen):
Bild von diesem Ort kopiert:
Wie Sie sehen können, macht jeder Algorithmus einige Annahmen über die Anzahl und Form der Cluster, die berücksichtigt werden müssen. Sei es implizite Annahmen des Algorithmus oder explizite Annahmen der Parametrisierung.
DBSCAN
Wikipedia an.