使用最近的邻居获取没有目标变量的 3 个最近的邻居

Using nearest neighbours to fetch 3 closest neighbours without a target variable

我正在编写一个程序来为我的数据集中的每个数据点获取 3 个最近的邻居。我的数据集有 47 个特征,有 5000 行条目,没有目标变量。我正在使用这个 here 将我的整个数据集作为一个 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

Post 这我想使用 findsuccess 函数来传递我正在寻找邻居的 id 并在 excel 中打印此列表。例如:

然后函数调用:# findsuccess(1234)

最终目标是从我的数据集中 id 1234 查看 3 个最近的邻居。最终目标是在这样的输出文件中打印这三个邻居:

id        Neigh1  Neigh2  Neigh3
1234      1334    1444    1555

我认为 NearestNeighborskneighbors_graph 方法适合您。它 returns 1(如果特定点是 k 最近邻)或 0 矩阵。

来自Documentation

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