我读了一篇论文,他们的检索系统基于 SIFT 描述符和快速近似 k-means 聚类。我安装了pyflann
. 如果我没记错的话,下面的命令只会找到特定样本的接近数据点的索引(例如,这里是从dataset
to的 5 个最近点的索引testset
)
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
. 以及如何根据集群中心拟合测试。因为我们可以在scikitlearnkmeans++
中使用聚类,然后我们根据模型拟合数据集:
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
吗?(我的意思是对数据集进行聚类(找到聚类中心并量化特征),然后根据上一步找到的聚类中心量化测试集)。