View Source Scholar.Neighbors.NNDescent (Scholar v0.3.0)
Nearest Neighbors Descent (NND) is an algorithm that calculates Approximated Nearest Neighbors (ANN) for a given set of points[1].
It is implemented using Random Projection Forest[2].
References
[1] Efficient K-Nearest Neighbor Graph Construction for Generic Similarity Measures. [2] Randomized partition trees for nearest neighbor search
Summary
Functions
Calculates the approximate nearest neighbors for a given set of points. It returns a struct containing two tensors
Query the training data for the nearest neighbors of the query data.
Query the training data for the nearest neighbors of the query data.
Functions
Calculates the approximate nearest neighbors for a given set of points. It returns a struct containing two tensors:
nearest_neighbors
- the indices of the nearest neighborsdistances
- the distances to the nearest neighbors
Examples
iex> data = Nx.iota({10, 5})
iex> key = Nx.Random.key(12)
iex> Scholar.Neighbors.NNDescent.fit(data, num_neighbors: 3, key: key)
Query the training data for the nearest neighbors of the query data.
Use this function if you query for the first time on a training data. It will compute search graph that can be reused in the future queries.
Examples
iex> data = Nx.iota({10, 5})
iex> query_data = Nx.tensor([[1,7,32,6,2], [1,4,5,2,5], [1,3,67,12,4]])
iex> key = Nx.Random.key(12)
iex> nn = Scholar.Neighbors.NNDescent.fit(data, num_neighbors: 3)
iex> Scholar.Neighbors.NNDescent.query(nn, query_data, num_neighbors: 5, key: key)
Query the training data for the nearest neighbors of the query data.
Use this function if you have already queried training data. It will compute search graph that can be reused in the future queries.
Examples
iex> data = Nx.iota({10, 5})
iex> query_data = Nx.tensor([[1,7,32,6,2], [1,4,5,2,5], [1,3,67,12,4]])
iex> key = Nx.Random.key(12)
iex> nn = Scholar.Neighbors.NNDescent.fit(data, num_neighbors: 3)
iex> {_indices, _distances, search_graph} = Scholar.Neighbors.NNDescent.query(nn, query_data, num_neighbors: 5, key: key)
iex> query_data2 = Nx.tensor([[2,7,32,6,2], [1,4,6,2,5], [1,3,67,12,3]])
iex> Scholar.Neighbors.NNDescent.query(nn, query_data2, search_graph, num_neighbors: 5, key: key)