【2】facebook大数据搜索库faiss使用
2018-01-24 16:57
2807 查看
Faiss建立在一些基础算法之上,这些基础算法都使用了非常高效率的实现方式:K-means聚类,PCA,PQ编码/解码。
结果中心点存储在kmeans.centroids中。目标函数的值(即kmeans的平方误差)以及迭代次数存储在kmeans.obj中。
kmeans训练结束以后,为了计算向量集x到聚类中心的距离,
为了找到x中与各中心点最近邻的15个点,用下面的方法:
在一个或多个GPU上聚类需要调整一下index对象。
在C++中apply_py由apply替换,在python中apply是一个保留关键字。
聚类
对存储在给定的2维tensor x中的向量集合进行聚类,如下所示:ncentroids = 1024 niter = 20 verbose = True d = x.shape[1] kmeans = faiss.Kmeans(d, ncentroids, niter, verbose) kmeans.train(x)
结果中心点存储在kmeans.centroids中。目标函数的值(即kmeans的平方误差)以及迭代次数存储在kmeans.obj中。
kmeans训练结束以后,为了计算向量集x到聚类中心的距离,
D,I=kmeans.index.search(x,1),返回值
I针对
x的每一行向量给出一个最近邻聚类中心。
D则包含了对应的平方L2距离。
为了找到x中与各中心点最近邻的15个点,用下面的方法:
index = faiss.IndexFlat2(d) index.add(x) D, I = index.search(kmeans.centroids, 15)
I包含了每个中心点最近邻,尺寸为(centroids, 15)。
在一个或多个GPU上聚类需要调整一下index对象。
PCA计算
将40维降低到10维:mt = np.random.rand(1000,40).astype('float32') mat = faiss.PCAMatrix(40,10) mat.train(mt) assert mat.is_trained tr = mat.apply_py(mt) print(tr ** 2).sum(0)
在C++中apply_py由apply替换,在python中apply是一个保留关键字。
PQ编码/解码
ProductQuantizer可以用于对向量进行编码解码:
d = 32 # data dimension cs = 4 # code size (bytes) # train set nt = 10000 xt = np.random.rand(nt, d).astype('float32') # dataset to encode (could be same as train) n = 20000 x = np.random.rand(n, d).astype('float32') pq = faiss.ProductQuantizer(d, cs, 8) pq.train(xt) # encode codes = pq.compute_codes(x) # decode x2 = pq.decode(codes) # compute reconstruction error avg_relative_error = ((x - x2)**2).sum() / (x ** 2)
相关文章推荐
- 【3】facebook大数据搜索库faiss使用——选择Index
- 【4】facebook大数据搜索库faiss使用——Faiss索引介绍
- 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)
- 数据结构之图(深度优先搜索和广度优先搜索使用的队列和栈)
- 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)
- 使用jquery创建一个ajax关键词数据搜索
- 使用DataView对象来搜索,筛选、排序、浏览及编辑数据
- 《程序员的第一年》---------- 【抓取网页数据】定时查寻淘宝搜索结果并用excel记录下来(HttpWebRequest与正则等的使用)
- 使用网页爬虫(高级搜索功能)搜集含关键词新浪微博数据
- 符号表的搜索,当一个槽中有数据时,使用下面的槽,以此类推
- 使用Java调用ElasticSearch提供的相关API进行数据搜索完整实例演示
- 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)
- 基于B-树和B+树的使用:数据搜索和数据库索引的详细介绍
- 基于B-树和B+树的使用:数据搜索和数据库索引的详细介绍
- 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)
- 使用List保存搜索结果,数据重复
- MSDN Visual系列:使用范围细化业务数据目录的搜索
- 使用 Apache Lucene 和 Solr 进行位置感知搜索——通过合并非结构化文本和空间数据改进搜索应用程序
- 关于ligerui 中 grid 表格的扩展搜索功能在远程数据加载时无法使用的解决办法
- 使用Vitamio打造自己的Android万能播放器(4)——本地播放(快捷搜索、数据存储)