BiocNeighbors 1.2.0
的BiocNeighbors包提供了几个近似邻居搜索算法:
这些方法是对精确算法的补充前面描述的.同样,通过简单地更改BNPARAM
论点findKNN
而且queryKNN
.
我们执行k近邻搜索与惹恼算法通过指定BNPARAM = AnnoyParam ()
.
nobs <- 10000 ndim <- 20 data <- matrix(runif(nobs*ndim), ncol=ndim) fout <- findKNN(data, k=10, BNPARAM=AnnoyParam()) head(fout$index)
# #[1][2][3][4][5][6][7][8][9][10] # #[1] 7555 5086 9439 2364 6914 1263 1132 1391 1525 4392 # #[2] 2529 2859 6391 7539 233 4216 2711 1634 6769 5059 # #[3] 8074 856 3739 9884 7796 3206 4028 6080 7700 7368 # #[4] 1904 7457 1358 4981 80 3059 2611 3660 5585 # #[5] 9633 4569 6416 2109 5793 874 9853 7188 3607 9814 # #(6日)3332 3088 4685 4288 5344 1662 9862 6265 8395 2729
头(输出端距离美元)
## [,1] [,2] [,3] [,4] [,5] [,5] [,5] [,6] [,7] ## [1,] 0.8958202 0.9145421 0.9997506 1.0066934 1.0105218 1.0194305 1.030048 1.0324202 ## [2,] 0.9210045 0.9830105 1.0066959 1.1366421 1.1463315 1.1473175 1.1486008 1.152792 1.1664172 ## [4,] 0.9566686 1.0086507 1.0369407 1.0365928 1.043324 1.0659174 ## [5,] 0.8362517 0.8495315 0.8664847 0.9435661 0.9663886 0.968679 0.9695346 ## [6,] 0.9608857 1.0108142 1.0270232 1.0398604 1.052492 1.0768716## [,8] [,9] [,10] ## [1,] 1.0981938 1.1111542 1.1121014 ## [2,] 1.0343252 1.0395184 1.0567859 ## [3,] 1.1868104 1.1954392 1.2020642 ## [4,] 1.0731800 1.0751356 1.0776922 ## [5,] 0.9799066 0.9799401 0.9857247 ## [6,] 1.0807590 1.0884249 1.0924859
我们还可以根据另一个数据集中的查询点来确定一个数据集中的k-最近邻居。
nquery <- 1000 ndim <- 20 query <- matrix(runif(nquery*ndim), ncol=ndim) qout <- queryKNN(data, query, k=5, BNPARAM=AnnoyParam()) head(qout$index)
[,1] [,2] [,3] [,4] [,5] ## [1,] 5659 6972 4381 6681 9156 ## [2,] 6057 9074 1223 7648 1542 ## [3,] 2870 4585 8511 4664 4277 ## [4,] 9147 9979 993 2529 3087 ## [5,] 1927 8848 1040 9185 83 ## [6,] 1482 9859 822 9934 1933
头(qout距离美元)
## [,1] [,2] [,3] [,4] [,5] ## [1,] 0.9738171 0.9998217 1.0388658 1.0398707 1.0481373 ## [2,] 1.0109079 1.0819900 1.1231607 1.1254007 1.1414075 ## [3,] 0.9531454 0.9596773 0.9623442 1.0143856 1.0283245 ## [4,] 1.0143973 1.0554299 1.0579753 1.0639384 1.0726366 ## [5,] 0.9490367 0.9518706 1.0136790 1.0294023 1.0444212 ## [6,] 0.8257428 0.9519003 0.9529459 0.9810284 0.9842274
通过设置HNSW算法也很容易使用BNPARAM = HnswParam ()
.
KMKNN算法描述的大多数选项在这里也适用。例如:
子集
为点的子集识别邻居。get.distance
避免在不必要的时候检索距离。BPPARAM
在多个工作人员之间并行计算。BNINDEX
为给定的数据集构建一次森林,并在多个调用之间重用它。使用预建BNINDEX
如下图所示:
- buildIndex(data, BNPARAM=AnnoyParam()) out1 <- findKNN(BNINDEX=pre, k=5) out2 <- queryKNN(BNINDEX=pre, query=query, k=2)
用户可以参考每个函数的文档,了解可用参数的具体细节。
树的森林形成一个保存到文件的索引结构。默认情况下,该文件位于tempdir ()
1在HPC文件系统上,可以进行更改TEMPDIR
到一个更适合并行访问的位置。并且在会话结束时将被删除。
AnnoyIndex_path(前)
## [1] "/tmp/RtmpvuIhM1/file63112abd05e6.idx"
如果索引要跨会话持久化,则可以直接在buildIndex
.但是,这意味着在计算完成后,用户有责任清理任何临时索引文件。
sessionInfo ()
## R版本3.6.0(2019-04-26)##平台:x86_64-pc-linux-gnu(64位)##运行在Ubuntu 18.04.2 LTS下## ##矩阵产品:默认## BLAS: /home/biocbuild/bbs-3.9-bioc/R/lib/libRblas。/home/biocbuild/bbs-3.9-bioc/R/lib/libRlapack。所以## ## locale: ## [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# # [3] LC_TIME=en_US。UTF-8 LC_COLLATE= c# # [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 ## [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# # [9] LC_ADDRESS=C lc_phone = c# # [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION=C ## ##附加的基本包:## [1]stats graphics grDevices utils datasets methods基础## ##其他附加包:## [1]BiocNeighbors_1.2.0 knitr_1.22 BiocStyle_2.12.0 ## ##通过命名空间加载(且未附加):## [1] Rcpp_1.0.1 bookdown_0.9 digest_0.6.18 ## [4] stats4_3.6.0 magrittr_1. 1.5 evaluate_0.13 ## [7] stringi_1.4.3 S4Vectors_0.22.0 rmarkdown_1.12 ## [10] BiocParallel_1.18.0 tools_3.6.0 string_1 .4.0 ## [13] parallel_3.6.0 xfun_0.6 yaml_2.2.0 ## [16] compiler_3.6.0 BiocGenerics_0.30.0 BiocManager_1.30.4 ## [19] htmltools_0.3.6