给定范围内的最近邻居

时间:2019-02-07 08:22:57

标签: python machine-learning range nearest-neighbor

我面临着迅速找到给定范围内最近的邻居的问题。

数据集示例:

id | string | float
0  |   AA   |  0.1
12 |   BB   |  0.5
2  |   CC   |  0.3
102|   AA   |  1.1
33 |   AA   |  2.8
17 |   AA   |  0.5

对于每行,打印满足以下条件的行数:

  1. 字符串字段等于当前值
  2. 浮动字段<=当前浮动-删除

在此示例中,del = 1.5:

id | count
0  |  0
12 |  0
2  |  0
102|  2  (string is equal row with id=0,33,17 but only in row id=0,17 float value: 1.1-1.5<=0.1, 1.1-1.5<=0.5)
33 |  0  (string is equal row with id=0,102,17 but 2.8-1.5>=0.1/1.1/1.5)
17 |  1  

为解决此问题,我使用了具有自定义指标的类BallTree,但是由于反向树遍历(在大型数据集上),因此它可以工作很长时间。 有人可以建议其他解决方案,还是可以将自定义指标的速度从sklearn.neighbors.DistanceMetric提高到指标的速度?

我的代码:

from sklearn.neighbors import BallTree
def distance(x, y):
    if(x[0]==y[0] and x[1]>y[1]):
        return (x[1] - y[1])
    else:
        return (x[1] + y[1])

tree2 = BallTree(X, leaf_size=X.shape[0], metric=distance) 
mas=tree2.query_radius(X, r=del, count_only = True)

0 个答案:

没有答案