Интересно, есть ли способ заставить sklearn алгоритм NearestNeighbors, чтобы принять во внимание порядок точки во входном массиве, когда есть повторяющиеся точки.Проблема с sklearn k ближайших соседей
Для иллюстрации:
>>> 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]])
Поскольку набор запросов соответствует обучающему набору, ближайший сосед каждой точки есть сама точка, на расстоянии от нуля. Однако, если я позволяю дублированные точки в X, алгоритм, по понятным причинам, не отличающим между дубликатами:
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]])
В идеале я хотел бы последний выход, чтобы быть что-то вроде:
>>>> array([[0, 6],
[1, 0],
[2, 1],
[3, 4],
[4, 3],
[5, 4],
[6, 0],
[7, 6]])