1

Я хочу рассчитать 20 наименований для каждого из N элементов в наборе данных. Каждый элемент представлен с использованием параметров M Размеры Таким образом, размер данных N_items X M_features.Почему NearestNeighbors (SKlearn) занимает больше времени, когда n_neighbors меньше, чем общее количество элементов?

Когда я не укажу n_neighbors (значение по умолчанию равно 5), функция kneighbors занимает много времени. Но когда я укажу n_neighbors = N_items, он дает результаты почти мгновенно.

i.e. NN_object = NearestNeighbors() занимает много времени, чтобы найти kneighbors, но NN_object = NearestNeighbors(n_neighbors=N_items) дает результаты довольно быстро.

Может ли кто-нибудь объяснить, что именно происходит за сценой?

PS: N_items в моем случае ~ 50K и M_features является ~ 10K.

+0

Ждать, что? 'len (features)' равно тому, что * точно *? – gsamaras

+0

https://github.com/scikit-learn/scikit-learn/blob/14031f6/sklearn/neighbors/base.py#L269 ссылка для функции k-соседа –

ответ

-1

Может быть, это происходит потому, что, когда вы поставляете n_neigbors=n_samples в первом случае, общее количество дистанционных метрических вычислений для каждой точки КомбинацияC(n_samples, n_neigbors) которая 1. Но когда вы делаете n_neigbors=21 тем количество вычислений возрастет во много-складках. Это приводит к увеличению времени выполнения. Посмотрите на алгоритм для ближайших соседей. Надеюсь, вы сможете получить определенную ясность, пройдя через это.

+0

Я уже видел документацию [NearestNeighbors] (http://scikit-learn.org/stable/modules/neighbors.html). Информация о вычислении матриц отсутствует. –