1介绍

BiocNeighbors包提供了一些近似的邻居搜索算法:

  • 骚扰最近的邻居哦(近似)方法使用的c++代码RcppAnnoy包中。它通过建立一个树,随机超平面分区一群点分成两个子组在每个内部节点。这是重复建设森林的树木,树木的数量决定了搜索的准确性。给定一个查询的数据点,我们识别出所有点在同一每棵树的叶子节点。然后把叶子节点集的联盟在树木和它们寻找最近的邻居。
  • HNSW(分层通航小世界)方法使用的c++代码RcppHNSW包中。它是通过建立一系列nagivable小世界图包含点之间的联系在整个数据集。该算法遍历图,每一步选择靠近给定查询点。图表包含链接的不同长度不同,产生一个层次结构,早期步骤大小以及后来的步骤。搜索的准确性是由图的连通性和中间的潜在的邻居列表的大小。

这些方法补充具体的算法前面描述的。再次,它是简单的切换算法从一个到另一个通过简单地改变BNPARAM论点findKNNqueryKNN

2确定最近的邻居

我们再执行与惹恼邻居搜索算法通过指定BNPARAM = AnnoyParam ()

脑袋< - 10000 ndim < < - - 20数据矩阵(runif(脑袋* ndim), ncol = ndim)输出信号< - findKNN(数据、k = 10 BNPARAM = AnnoyParam())头(输出端美元指数)
# #[1][2][3][4][5][6][7][8][9][10]# #[1]4505 4168 617 8623 4240 6847 2259 5830 4422 1608 # #[2]1539 6123 9034 8664 9644 2079 6207 5303 2202 8149 # #[3]2978 6267 4601 1804 5566 1079 2886 5003 8680 9352 # #[4]2691 9637 5359 8149 5062 5112 5903 274 2143 1410 # #[5]5874 1426 133 8065 1319 3159 7696 8543 5047 8534 # #(6日)7955 3359 549 5782 4825 6797 2841 1235 6215 7083
头(输出端距离美元)
# #[1][2][3][4][5][6][7]# #(1)0.8825449 0.9915909 1.0092245 1.0188426 1.0392540 1.0516332 1.0519289 # #(2)0.8622014 0.9186255 0.9317672 1.0342002 1.0359803 1.0780544 - 1.0795301 # #(3)0.8337301 0.8998619 0.9341834 0.9551983 0.9601048 0.9736210 0.9805866 # #(4)0.8187793 0.8193409 0.9103844 0.9208554 0.9429098 0.9466539 - 0.9617505 # #(5)0.8705071 0.9711886 0.9909576 1.0005188 1.0054835 1.0277821 1.0325969 # #[6]0.9291477 0.9332741 0.9387993 0.9396378 0.9666235 0.9844171 - 0.9942077 # #[8][9][10]# #(1)1.0579325 1.058985 1.060058 # #(2)1.0945244 1.105723 1.114920 # # # #(3)1.0039030 1.012025 1.012901 0.9816138 1.012709 1.028672(4)# #(5)1.0444629 1.049320 1.053118 # #(6日)1.0305445 1.050729 1.057779

我们也可以在一个数据集的基础上再确定邻居查询分在另一个数据集。

nquery ndim < < - 1000 - 20查询< -矩阵(runif (nquery * ndim), ncol = ndim) qout < - queryKNN(数据、查询、k = 5, BNPARAM = AnnoyParam())头(qout美元指数)
# # [1][2][3][4][5]# # [1]7059 7607 2129 2347 6307 # # (2)6159 8596 6062 8976 9349 # # 5669 9320 7673 6012 7089 (3)# # [4]4221 4691 3187 7418 4053 # # (5)8709 1907 4231 4425 4741 # # 8317 1419 849 9364 4506 (6)
头(qout距离美元)
# #[1][2][3][4][5]# #(1)0.9419826 0.9975957 1.0318391 1.0445652 - 1.0455526 # #(2)0.8231115 0.8697896 0.9104496 0.9648659 - 0.9910955 # #(3)0.9634522 1.0049822 1.0079889 1.0189093 - 1.0468636 # #(4)0.8537957 0.8811178 0.9886814 1.0454019 - 1.0553904 # #(5)0.8202045 0.9335378 1.0480314 1.0797175 - 1.0798849 # #(6日)0.8650038 0.9380068 0.9622783 0.9756745 1.0326613

它也同样容易使用HNSW算法通过设置BNPARAM = HnswParam ()

3进一步的选择

选项描述的最准确的方法也适用于这里。例如:

  • 子集确定邻居的一个子集点。
  • get.distance为了避免不必要时检索的距离。
  • BPPARAM并行化计算跨多个工人。
  • BNINDEX建立森林一旦给定数据集和重用它在调用。

使用预构建的BNINDEX所示:

前< - buildIndex(数据,BNPARAM = AnnoyParam())着干活< - findKNN (BNINDEX =前,k = 5) out2 < - queryKNN (BNINDEX =前,查询=查询,k = 2)

骚扰和HNSW默认执行搜索基于欧氏距离。搜索的曼哈顿距离是通过简单的设置距离=“曼哈顿”AnnoyParam ()HnswParam ()

用户文档的每个函数的具体细节可用参数。

4保存索引文件

骚扰和HNSW生成索引结构——森林的树木和一系列的图表,当调用——分别保存到文件buildIndex ()。默认情况下,这个文件位于tempdir ()1在HPC的文件系统,您可以改变TEMPDIR保存到一个位置,更适合并发访问。会议结束时,将被删除。

AnnoyIndex_path(前)
# # [1]“/ tmp / RtmpayapNL / file1b8bdd5f9f8fb5.idx”

如果跨会话持续索引,索引文件的路径可以直接指定buildIndex。这可以用来构造索引对象直接使用相关的构造函数,例如,AnnoyIndex (),HnswIndex ()。然而,它成为用户的责任清理任何临时索引文件完成后计算。

5会话信息

sessionInfo ()
# # R版本4.2.0 RC (2022-04-19 r82224) # #平台:x86_64-pc-linux-gnu(64位)# #下运行:Ubuntu 20.04.4 LTS # # # #矩阵产品:默认# #布拉斯特区:/home/biocbuild/bbs - 3.15 - bioc / R / lib / libRblas。所以# # LAPACK: /home/biocbuild/bbs - 3.15 - bioc / R / lib / libRlapack。# # # #语言环境:# # [1]LC_CTYPE = en_US。utf - 8 LC_NUMERIC = C # #[3]而= en_GB 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 = C LC_TELEPHONE = # # [11] LC_MEASUREMENT = en_US。utf - 8 LC_IDENTIFICATION = C附加基本包:# # # # # #[1]统计图形grDevices跑龙套数据集方法基础# # # #其他附加包:# # [1]BiocNeighbors_1.14.0 knitr_1.38 BiocStyle_2.24.0 # # # #通过加载一个名称空间(而不是附加):# # [1]Rcpp_1.0.8.3 magrittr_2.0.3 BiocGenerics_0.42.0 # # [4] BiocParallel_1.30.0 lattice_0.20-45 R6_2.5.1 # # [7] rlang_1.0.2 fastmap_1.1.0 stringr_1.4.0 # # [10] tools_4.2.0 parallel_4.2.0 grid_4.2.0 # # [13] xfun_0.30 cli_3.3.0 jquerylib_0.1.4 # # [16] htmltools_0.5.2 yaml_2.3.5 digest_0.6.29 # # [19] bookdown_0.26 Matrix_1.4-1 BiocManager_1.30.17 # # [22] S4Vectors_0.34.0 sass_0.4.1 evaluate_0.15 # # [25] rmarkdown_2.14 stringi_1.7.6 compiler_4.2.0 # # [28] bslib_0.3.1 stats4_4.2.0 jsonlite_1.8.0