查找样本子集的最近邻居

时间:2017-08-02 17:44:51

标签: python machine-learning scikit-learn nearest-neighbor

我有一个大约300万个样本的数据集(每个样本只有3个特征)。我使用scikit的sklearn.neighbors模块 - 特别是radius_neighbor_graph - 来查找哪些样本属于特定样本的小半径。

这很好用,但不出所料,计算这个图表真的很慢。

它也非常浪费,因为我只需要知道邻居的一小部分样本(大约100,000个) - 而且我事先知道这个子集。

那么......有没有办法通过计算给定半径内的邻居来获得更高效的这个样本子集?看起来它应该很简单,但我不能想到一个简单的方法。

1 个答案:

答案 0 :(得分:0)

首先,创建半径邻域图的任务涉及读取与数据集关联的N×N距离矩阵。由于距离矩阵具有良好的属性,因此可以节省一些时间,但仍然存在O(N ^ 2)的复杂性。这里N是数据集X中的数据点数。

所以可以说,只有少数n

因此,我认为您没有为您的案例找到预定义的功能。如果你想自己构建一个,步骤应该如下:让X成为你的数据集,我就是你感兴趣的数据点。

  1. 创建与数据集关联的距离矩阵D,使用scipy.spatial.distance_matrix并将x作为数据集的小子集,并作为整个数据集。
  2. 创建一个列表,neighbors = []
  3. 循环距离矩阵的第i行。如果D(i,j)< epsilon,然后在邻居中保存j。它是i的epsilon邻域中的数据点的索引。
  4. 返回邻居
  5. 当然,距离矩阵的计算应该在开始时进行一次(如果你把所有东西都包装在一个类中,可能在 init ()),以及返回所有epsilon邻居的函数/方法数据点的数据应仅取决于所讨论的数据点的索引。

    希望这有帮助!