首页 > 解决方案 > 为什么 Skealearn-NearestNeighbors 返回奇怪/错误的结果?

问题描述

from sklearn.neighbors import NearestNeighbors
import numpy as np
import matplotlib.pyplot as plt

X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
plt.scatter(X[:,0], X[:,1])
nbrs = NearestNeighbors(n_neighbors=4, algorithm='kd_tree').fit(X)
distances, indices = nbrs.kneighbors(X)

print(indices)
print(distances)
print(nbrs.kneighbors_graph(X).toarray())
[[0 1 2 3]
 [1 0 2 3]
 [2 1 0 3]
 [3 4 5 0]
 [4 3 5 0]
 [5 4 3 0]]
[[0.         1.         2.23606798 2.82842712]
 [0.         1.         1.41421356 3.60555128]
 [0.         1.41421356 2.23606798 5.        ]
 [0.         1.         2.23606798 2.82842712]
 [0.         1.         1.41421356 3.60555128]
 [0.         1.41421356 2.23606798 5.        ]]
[[1. 1. 1. 1. 0. 0.]
 [1. 1. 1. 1. 0. 0.]
 [1. 1. 1. 1. 0. 0.]
 [1. 0. 0. 1. 1. 1.]
 [1. 0. 0. 1. 1. 1.]
 [1. 0. 0. 1. 1. 1.]]

对于最后三点,我认为第 4 个数据是最接近的。为什么代码返回最接近的第一个数据?

在此处输入图像描述

标签: scikit-learnknn

解决方案


我不知道最后三个点最接近第四个数据是什么意思。但是,如果您将 与distances进行比较indices,那么输出对我来说似乎是正确的。


推荐阅读