Ich möchte das Knn-Entfernungsdiagramm verwenden, um herauszufinden, welchen EPS-Wert ich für den DBSCAN-Algorithmus wählen soll. Basierend auf dieser Seite:
Die Idee ist, den Durchschnitt der Entfernungen jedes Punktes zu seinen k nächsten Nachbarn zu berechnen. Der Wert von k wird vom Benutzer angegeben und entspricht MinPts. Als nächstes werden diese k-Abstände in aufsteigender Reihenfolge aufgetragen. Ziel ist es, das „Knie“ zu bestimmen, das dem optimalen eps-Parameter entspricht.
Wenn ich Python mit numpy / sklearn verwende, habe ich die folgenden Punkte mit dem folgenden Abstand für 6-knn:
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
nbrs = NearestNeighbors(n_neighbors=len(X)).fit(X)
distances, indices = nbrs.kneighbors(X)
# Indices
[[0 1 2 3 4 5]
[1 0 2 3 4 5]
[2 1 0 3 4 5]
[3 4 5 0 1 2]
[4 3 5 0 1 2]
[5 4 3 0 1 2]]
# Distances
[[ 0. 1. 2.23606798 2.82842712 3.60555128 5. ]
[ 0. 1. 1.41421356 3.60555128 4.47213595 5.83095189]
[ 0. 1.41421356 2.23606798 5. 5.83095189 7.21110255]
[ 0. 1. 2.23606798 2.82842712 3.60555128 5. ]
[ 0. 1. 1.41421356 3.60555128 4.47213595 5.83095189]
[ 0. 1.41421356 2.23606798 5. 5.83095189 7.21110255]]
dann habe ich die durchschnittliche Entfernung berechnet:
distances.mean()
2.9269575028354495
Das Problem ist, dass ich nicht verstehe, wie genau ich das gleiche Diagramm mit Abständen auf der y-Achse und der Anzahl der Punkte entsprechend den Abständen auf der x-Achse mit Python darstellen kann.
Danke für deine Hilfe.