Ich frage mich, ob es eine Möglichkeit gibt, sklearn NearestNeighbors Algorithmus zu erzwingen, um die Reihenfolge eines Punktes im Eingabe-Array zu berücksichtigen, wenn es doppelte Punkte gibt.Problem mit sklearn k nächsten Nachbarn
Zur Veranschaulichung:
>>> from sklearn.neighbors import NearestNeighbors
>>> import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X)
distances, indices = nbrs.kneighbors(X)
indices
>>>> array([[0, 1],
[1, 0],
[2, 1],
[3, 4],
[4, 3],
[5, 4]])
Da die Abfrage Satz des Trainingssatz übereinstimmt, wird der nächste Nachbar von jedem Punkt der Punkt selbst, in einem Abstand von Null. Wenn jedoch gestatten, dass ich für doppelte Punkte in X, der Algorithmus verständlicherweise nicht zwischen den Duplikaten:
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1],[3, 2],[-1,-1],[-1,-1]])
nbrs = NearestNeighbors(n_neighbors=2, algorithm='auto').fit(X)
distances, indices = nbrs.kneighbors(X)
indices
>>>> array([[6, 0],
[1, 0],
[2, 1],
[3, 4],
[4, 3],
[5, 4],
[6, 0],
[6, 0]])
Idealerweise würde ich die letzte Ausgabe gerne etwas wie:
>>>> array([[0, 6],
[1, 0],
[2, 1],
[3, 4],
[4, 3],
[5, 4],
[6, 0],
[7, 6]])