## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- library(rnndescent) ## ----iris split--------------------------------------------------------------- iris_even <- iris[seq_len(nrow(iris)) %% 2 == 0, ] iris_odd <- iris[seq_len(nrow(iris)) %% 2 == 1, ] ## ----brute force query-------------------------------------------------------- brute_nbrs <- brute_force_knn_query( query = iris_odd, reference = iris_even, k = 15 ) ## ----brute force query results------------------------------------------------ lapply(brute_nbrs, function(m) { head(m[, 1:5]) }) ## ----rpf_knn_query------------------------------------------------------------ rpf_index <- rpf_build(iris_even) rpf_nbrs <- rpf_knn_query( query = iris_odd, reference = iris_even, forest = rpf_index, k = 15 ) ## ----graph_knn_query---------------------------------------------------------- graph_nbrs <- graph_knn_query( query = iris_odd, reference = iris_even, reference_graph = rpf_nbrs, k = 15 ) ## ----iris binarize------------------------------------------------------------ numeric_iris <- iris[, sapply(iris, is.numeric)] logical_iris <- sweep(numeric_iris, 2, colMeans(numeric_iris), ">") logical_iris_even <- logical_iris[seq_len(nrow(logical_iris)) %% 2 == 0, ] logical_iris_odd <- logical_iris[seq_len(nrow(logical_iris)) %% 2 == 1, ] head(logical_iris_even) ## ----iris binarize brute force------------------------------------------------ iris_logical_brute_nbrs <- brute_force_knn_query( query = logical_iris_odd, reference = logical_iris_even, k = 15, metric = "hamming" ) ## ----iris search with binary init--------------------------------------------- graph_nbrs <- graph_knn_query( query = iris_odd, reference = iris_even, reference_graph = rpf_nbrs, init = iris_logical_brute_nbrs$idx, k = 15 ) ## ----iris forest init--------------------------------------------------------- forest_init_nbrs <- graph_knn_query( query = iris_odd, reference = iris_even, reference_graph = rpf_nbrs, init = rpf_index, k = 15 ) ## ----iris search graph-------------------------------------------------------- set.seed(42) iris_search_graph <- prepare_search_graph( data = iris_even, graph = rpf_nbrs, diversify_prob = 0.1, pruning_degree_multiplier = 1.5 ) ## ----iris search graph histogram---------------------------------------------- search_graph_edges <- diff(iris_search_graph@p) hist(search_graph_edges, main = "Distribution of search graph edges", xlab = "# edges" ) range(search_graph_edges) ## ----iris use a search graph-------------------------------------------------- search_nbrs <- graph_knn_query( query = iris_odd, reference = iris_even, reference_graph = iris_search_graph, init = rpf_index, k = 15 )