find_knn {knn.covertree} | R Documentation |
kNN search
Description
k nearest neighbor search with custom distance function.
Usage
find_knn(data, k, ..., query = NULL, distance = c("euclidean",
"cosine", "rankcor"), sym = TRUE)
Arguments
data |
Data matrix |
k |
Number of nearest neighbors |
... |
Unused. All parameters to the right of the |
query |
Query matrix. In |
distance |
Distance metric to use. Allowed measures: Euclidean distance (default), cosine distance ( |
sym |
Return a symmetric matrix (as long as query is NULL)? |
Value
A list
with the entries:
index
A
nrow(data) \times k
integer matrix containing the indices of the k nearest neighbors for each cell.dist
A
nrow(data) \times k
double matrix containing the distances to the k nearest neighbors for each cell.dist_mat
-
A
dgCMatrix
ifsym == TRUE
, else adsCMatrix
(nrow(query) \times nrow(data)
). Any zero in the matrix (except for the diagonal) indicates that the cells in the corresponding pair are close neighbors.
Examples
# The default: symmetricised pairwise distances between all rows
pairwise <- find_knn(mtcars, 5L)
image(as.matrix(pairwise$dist_mat))
# Nearest neighbors of a subset within all
mercedeses <- grepl('Merc', rownames(mtcars))
merc_vs_all <- find_knn(mtcars, 5L, query = mtcars[mercedeses, ])
# Replace row index matrix with row name matrix
matrix(
rownames(mtcars)[merc_vs_all$index],
nrow(merc_vs_all$index),
dimnames = list(rownames(merc_vs_all$index), NULL)
)[, -1] # 1st nearest neighbor is always the same row