Использование ближайших соседей для получения 3 ближайших соседей без целевой переменной - PullRequest
1 голос
/ 27 февраля 2020

Я пишу программу для выборки 3 ближайших соседей для каждой точки данных в моем наборе данных. В моем наборе данных 47 объектов с 5000 записями строк и без целевой переменной. Я использую этот здесь , чтобы поместить весь мой набор данных в массив numpy. Я разрабатываю следующий код, но, похоже, застрял:

X = df.to_numpy()

from sklearn.neighbors import NearestNeighbors
def findsuccess(id):
    nbrs = NearestNeighbors(n_neighbors=3)
    nbrs.fit(X)
    pred = nbrs.kneighbors(X,3)
    for i in pred:
       print  "What should come here" ?? - I need to print my 3 neighbours here at this step

Публикуйте это сообщение. Я хочу использовать функцию findsuccess, чтобы передать идентификатор, для которого я ищу соседей, и распечатать этот список в Excel как хорошо. Например:

затем вызов функции: # findsuccess(1234)

Конечная цель - увидеть 3 ближайших соседей из моего id 1234 из моего набора данных. Конечная цель состоит в том, чтобы напечатать этих трех соседей в выходном файле как это:

id        Neigh1  Neigh2  Neigh3
1234      1334    1444    1555

1 Ответ

1 голос
/ 27 февраля 2020

Я думаю, kneighbors_graph метод NearestNeighbors будет работать для вас. Возвращает 1 (если конкретная точка k ближайшего соседа) или 0 матрицы.

Из Документация

>>> X = [[0], [3], [1]]
>>> from sklearn.neighbors import NearestNeighbors
>>> neigh = NearestNeighbors(n_neighbors=2)
>>> neigh.fit(X)
NearestNeighbors(n_neighbors=2)
>>> A = neigh.kneighbors_graph(X)
>>> A.toarray()
array([[1., 0., 1.],
       [0., 1., 1.],
       [1., 0., 1.]])

Вы можете сделать что-то вроде этого:


from sklearn.neighbors import NearestNeighbors
X = df.to_numpy()
nbrs = NearestNeighbors(n_neighbors=3)
nbrs.fit(X)

def findsuccess(id):
    neighbors_f_id = nbrs.kneighbors_graph([X[id]]).indices
    print  ('Neighbors of id', neighbors_f_id)

...