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

时间:2018-03-10 18:46:10

标签: python cluster-analysis hierarchical-clustering flann cbir

我读了一篇论文,他们的检索系统基于SIFT描述符和fast approximate k-means clustering。我安装了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)

我查看了用户手册,但是,我可以找到如何使用k-means FLANN clusterin。以及如何根据群集中心进行测试。我们可以在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使用相同的程序? (我的意思是聚类数据集(找到聚类中心和量化特征),然后根据上一步中找到的聚类中心量化测试集。)

1 个答案:

答案 0 :(得分:1)

您无法使用FLANN进行最佳​​变体,因为它们同时使用两个索引,并且难以实现。

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