返回信息流现在又一个需求,需要从百万级别的向量中找出topK(K<20)个与给定向量相似度最大的向量。
向量的维度控制在50~200之间,不知道有什么比较快速的算法可以解决的。向量的每个维度的值是double类型的,不稀疏,有正有负。
PS:这里的topK不是严格的,不需要准确的topK,可以损失一些准确率还换取时间上(质)的提升。
PSS:2014年11月27日17:18:47更新:
今天终于有时间测了一下kd-tree,结果,嗯,不知道是不是我实现的不好的问题,测试数据36w,然后用kd-tree取top1 用了20+秒,没错,就是20+秒,而暴力也只需要3秒。。。还以为是代码错了什么的,log看了一下,搜索空间是变小了,但是不明显,也就几千个向量没有参与计算。
是不是我的测试向量太少了,向量维度不够高或者太高了?不过内存实在放不下了再扩大的话。。。
不知道各位大大有没有了解情况的。。。求指点。。。
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #14714同步于 2014/11/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
向量相似度快速计算
Forest0579
2014/11/18镜像同步32 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
kd-tree可破,推荐nanoflann,header-only library,简单无脑。
https://github.com/jlblancoc/nanoflann
试试局部敏感哈希(locality sensitive hashing)??
网上有代码:http://www.mit.edu/~andoni/LSH/
这个之前了解过一点,不知道对double类型的数据是否适合
【 在 coldmoon 的大作中提到: 】
: 试试局部敏感哈希(locality sensitive hashing)??
: 网上有代码:http://www.mit.edu/~andoni/LSH/
多谢大大,我试试
【 在 lizz 的大作中提到: 】
: kd-tree可破,推荐nanoflann,header-only library,简单无脑。
: https://github.com/jlblancoc/nanoflann