2

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]]) 

Antwort

1

ich denke, man kann das nicht tun, da aus dem ref wir haben:

Warnung: In Bezug auf die nächsten Nachbarn Algorithmen, wenn zwei Nachbarn, Nachbar k + 1 und k, haben identische Entfernungen, aber unterschiedliche Bezeichnungen, die Ergebnisse hängen von der Reihenfolge der Trainingsdaten ab.

Verwandte Themen