与sklearn.neighbors.NearestNeighbors的输出混淆

时间:2018-12-21 14:18:16

标签: python scikit-learn

这是代码。

{{1}}

我不太了解“索引”和“距离”的形状。我如何理解这些数字的含义?

3 个答案:

答案 0 :(得分:1)

实际上非常简单。对于kneighbors()(此处为X)的输入中的每个数据样本,它将显示2个邻居。 (因为您已指定n_neighbors=2indices将为您提供训练数据的索引(此处再次为X),而distances将为您提供相应数据点的距离在训练数据中(索引所指)。

以单个数据点为例。假设X[0]作为第一个查询点,答案将是indices[0]distances[0]

对于X[0]

  • 训练数据中第一近邻的索引为indices[0, 0] = 0,距离为distances[0, 0] = 0。您可以使用该索引值从训练数据中获取实际数据样本。

    这是有道理的,因为您使用了相同的数据进行训练和测试,所以每个点的第一个最近邻居是它自己,距离是0

  • 第二近邻的索引为indices[0, 1] = 1,距离为distances[0, 1] = 1

对于其他所有点也是如此。 indicesdistances中的第一个维度对应于查询点,第二个维度对应于所请求的邻居数。

答案 1 :(得分:1)

也许草图会有所帮助

enter image description here

例如,索引为0的最接近训练样本的点是1,并且由于您使用的是n_neighbors = 2(两个邻居),因此希望看到这对结果。确实,您看到对[0, 1]出现在输出中。

答案 2 :(得分:1)

我将对上述内容进行评论,说明如何使用pandas数据帧中的indexs数组获取"n_neighbors=2"邻居。所以,

import pandas as pd

df = pd.DataFrame([X.iloc[indices[row,col]] for row in range(indices.shape[0]) for col in range(indices.shape[1])])