如何使用 FLANN 进行标记和聚类



我读过一篇论文,他们的检索系统是基于SIFT描述符和快速近似k均值聚类的。我安装了pyflann.如果我没记错的话,以下命令仅查找特定样本的接近数据点的索引(例如,此处,从 datasettestset 的 5 个最近点的索引(

from pyflann import *
from numpy import *
from numpy.random import *
dataset = rand(10000, 128)
testset = rand(1000, 128)
flann = FLANN()
result,dists = flann.nn(dataset,testset,5,algorithm="kmeans",
branching=32, iterations=7, checks=16)

但是,我浏览了用户手册,可以找到如何使用FLANN进行k-means集群,以及如何根据集群中心拟合测试。由于我们可以在scikitlearn中使用kmeans++聚类,然后我们根据模型拟合数据集:

kmeans=KMeans(n_clusters=100,init='k-means++',random_state = 0, verbose=0)
kmeans.fit(dataset)

稍后我们可以通过使用KDTree例如为测试集分配标签。

kdt=KDTree(kmeans.cluster_centers_)
Q=testset  #query
kdt_dist,kdt_idx=kdt.query(Q,k=1)  #knn
test_labels=kdt_idx  #knn=1 labels

有人可以帮我如何对FLANN使用相同的程序吗?(我的意思是对数据集进行聚类(查找聚类中心并量化特征(,然后根据上一步中找到的聚类中心量化测试集(。

您将无法使用 FLANN 进行最佳变体,因为它们同时使用两个索引,并且实现起来很丑陋。

但是,您可以在每次迭代的中心上构建一个新索引。但除非你有 k> 1000,否则它可能没有多大帮助。

相关内容

  • 没有找到相关文章

最新更新