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

Python 3.x 使用最近邻获取3个没有目标变量的最近邻,python-3.x,scikit-learn,knn,nearest-neighbor,Python 3.x,Scikit Learn,Knn,Nearest Neighbor,我正在编写一个程序,为数据集中的每个数据点提取3个最近邻。我的数据集有47个功能,有5000行条目,没有目标变量。我使用它将整个数据集作为numpy数组进行拟合。我正在开发以下代码,但似乎被卡住了: X = df.to_numpy() from sklearn.neighbors import NearestNeighbors def findsuccess(id): nbrs = NearestNeighbors(n_neighbors=3) nbrs.fit(X)

我正在编写一个程序,为数据集中的每个数据点提取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
发布此内容我想使用
findsucces
函数传递我正在寻找邻居的id,并在excel中打印此列表。例如:

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

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

id        Neigh1  Neigh2  Neigh3
1234      1334    1444    1555

我认为
kneighbors\u图
NearestNeighbors\u图
方法适合您。它返回1(如果特定点是k近邻)或0矩阵

您可以这样做:


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)


感谢您分享此解决方案。我有两个问题:我是什么?我应该如何在这里获取id的索引?第二个问题,我应该如何获得我在问题中提到的输出中的数据。再次感谢!!如果您的id是索引,那么您可以离开该步骤
Neights\u f\u id
将具有邻居的id,之后您可以按照所需的方式格式化。不幸的是,我仍然收到此错误。ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()。为什么会来这里?我在这一行遇到错误:neighbors\u id=np。其中(nbrs.kneighbors\u graph([X[I]])[0]抱歉,这是稀疏矩阵。这就是我以前的解决方案不起作用的原因。尝试更新的解决方案。完美!工作!非常感谢你!

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)