-
-
Notifications
You must be signed in to change notification settings - Fork 26.6k
Closed
Labels
Description
Related to #4453
Currently using the Haversine distance with the default NearestNeigbors parameters produces an error,
>>> nn = NearestNeighbors(metric="haversine")
>>> nn.fit([[48.8322, 2.3561], [45.7679, 4.8506]])
NearestNeighbors(algorithm='auto', leaf_size=30, metric='haversine',
metric_params=None, n_jobs=None, n_neighbors=5, p=2, radius=1.0)
>>> nn.kneighbors([[48.8322, 2.3561]], 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/rth/src/scikit-learn/sklearn/neighbors/base.py", line 449, in kneighbors
dist, neigh_ind = zip(*result)
File "/home/rth/src/scikit-learn/sklearn/metrics/pairwise.py", line 1282, in pairwise_distances_chunked
n_jobs=n_jobs, **kwds)
File "/home/rth/src/scikit-learn/sklearn/metrics/pairwise.py", line 1380, in pairwise_distances
"callable" % (metric, _VALID_METRICS))
ValueError: Unknown metric haversine. Valid metrics are ['euclidean', 'l2', 'l1', 'manhattan', 'cityblock', 'braycurtis', 'canberra', 'chebyshev', 'correlation', 'cosine', 'dice', 'hamming', 'jaccard', 'kulsinski', 'mahalanobis', 'matching', 'minkowski', 'rogerstanimoto', 'russellrao', 'seuclidean', 'sokalmichener', 'sokalsneath', 'sqeuclidean', 'yule', 'wminkowski'], or 'precomputed', or a callableand yet, haversine is a valid metric for ball_tree,
>>> nn = NearestNeighbors(metric="haversine", algorithm='ball_tree')
>>> nn.fit([[48.8322, 2.3561], [45.7679, 4.8506]])
NearestNeighbors(algorithm='ball_tree', leaf_size=30, metric='haversine',
metric_params=None, n_jobs=None, n_neighbors=5, p=2, radius=1.0)
>>> nn.kneighbors([[48.8322, 2.3561]], 2)
(array([[0. , 2.80680966]]), array([[0, 1]]))This means something is wrong in the input validation for algorithm='auto', which might also affect other metrics.
Note: this uses scikit-learn master.