KNN terrain à distance pour déterminer un bpa de dbscan
-
16-10-2019 - |
Question
Je voudrais utiliser la parcelle à distance KNN pour être en mesure de savoir quelle valeur dois-je au format eps choisir l'algorithme dbscan. Basé sur cette page :
L'idée est de calculer, la moyenne des distances de chaque point à son k voisins les plus proches. La valeur de k sera spécifiée par le et l'utilisateur correspond à MinPts. Ensuite, ces k-distances sont tracées en un ordre croissant. L'objectif est de déterminer le « genou », qui correspond au paramètre optimal d'EPS.
Utilisation de python avec numpy / sklearn, j'ai les points suivants avec la distance suivante pour 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]]
je calcule la distance moyenne:
distances.mean()
2.9269575028354495
Le problème est que je ne comprends pas comment pourrais-je représenter exactement le même terrain que les distances avec l'axe des Y et le nombre de points en fonction des distances sur l'axe des x en utilisant Python.
Merci pour votre aide.
La solution
- prendre la dernière colonne de cette matrice
- trier par ordre décroissant
- index de la parcelle, la distance
- l'espoir de voir un genou (si la distance ne fonctionne pas bien. Il pourrait y avoir aucune)