Почему пользовательское значение metri c для ближайших соседей в scikit-learn не завершается? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть некоторые данные как таковые:

>>> X[:5]
array([[0.024, 2, 1],
       [0.006999999999999999, 1, 1],
       [0.028999999999999998, 7, 2],
       [0.017, 1, 1],
       [0.003, 3, 2]], dtype=object)
>>> len(X)
13000

По какой-то причине, когда у меня есть следующее:

nbrs =  NearestNeighbors(n_neighbors=4, algorithm='ball_tree', metric='euclidean')
nbrs.fit(X)
dist, ind = nbrs.kneighbors(X)

Для вычисления соседей требуется меньше минуты.

Однако, если я сделаю это:

def myeuclid(x, y):
    return np.sum((x-y)**2)

nbrs =  NearestNeighbors(n_neighbors=4, algorithm='ball_tree', metric=myeuclid)
nbrs.fit(X)
dist, ind = nbrs.kneighbors(X)

Это не завершает sh вычисления. Я оставил его на несколько часов. Почему это так? Я на самом деле использую пользовательскую функцию, отличную от евклидовой, для измерения расстояния, но, конечно, там происходит то же самое. Я основывал metric=func параметр, основанный на этом ответе

...