我读了一篇论文,他们的检索系统基于SIFT描述符和fast approximate k-means clustering。我安装了pyflann
。如果我没有弄错,以下命令只能找到特定样本的关闭数据点的索引(例如,此处,从dataset
到testset
的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
使用相同的程序? (我的意思是聚类数据集(找到聚类中心和量化特征),然后根据上一步中找到的聚类中心量化测试集。)
答案 0 :(得分:1)
您无法使用FLANN进行最佳变体,因为它们同时使用两个索引,并且难以实现。
但是你可以为每次迭代在中心上建立一个新的索引。但除非你有k> 1000它可能没有多大帮助。