Реализация k ближайших соседей из матрицы расстояний? - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь сделать следующее:

Учитывая dataFrame расстояния, я хочу идентифицировать k-ближайших соседей для каждого элемента. Пример:

  A B C D
A 0 1 3 2
B 5 0 2 2
C 3 2 0 1
D 2 3 4 0

Если k = 2, он должен вернуть:

A: B D
B: C D
C: D B
D: A B

Расстояния не обязательно симметричны. Я думаю, что где-то должно быть что-то, что делает это эффективным образом, используя Pandas DataFrames. Но я ничего не могу найти?

Самодельный код также очень приветствуется! :)

Спасибо!

1 Ответ

0 голосов
/ 29 июня 2018

На мой взгляд, я просто нахожу n + 1 наименьшие числа / расстояния / соседей для каждой строки и удаляю 0, что даст вам n числа / расстояния / соседей. Имейте в виду, что код не будет работать, если у вас есть ноль! Только диагонали могут быть равны 0.

import pandas as pd
import numpy as np



X = pd.DataFrame([[0, 1, 3, 2],[5, 0, 2, 2],[3, 2, 0, 1],[2, 3, 4, 0]])

X.columns = ['A', 'B', 'C', 'D']
X.index = ['A', 'B', 'C', 'D']

X = X.T

for i in X.index:

    Y = X.nsmallest(3, i)
    Y = Y.T
    Y = Y[Y.index.str.startswith(i)]
    Y = Y.loc[:, Y.any()]

    for j in Y.index:
        print(i + ": ", list(Y.columns))

Это распечатывает:

A:  ['B', 'D']
B:  ['C', 'D']
C:  ['D', 'B']
D:  ['A', 'B']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...