kdtree是否用于加速k-means聚类



我正在使用k-means做一个项目,我的教授建议使用kdtree。我在python中找到了kdtree的这个实现(我知道scipy中也有,但我找不到任何示例实现)。我的问题和标题一样,是用kdtree来加速k均值,还是我错了?

data = [(2,2),(1,0),(2,3),(10,5),(59,8),(4,2)]
tree = KDTree.construct_from_data(data)
nearest = tree.query(query_point=(5,4), t=3)
print nearest

输出:

[(4, 2), (2, 3), (2, 2)]

正如"使k均值更快",P137,论文表明,kd-tree可以用于低维数据的k均值算法,而直接的Lloyd算法对于高维数据更有效。

对于高维数据,诸如k-d树之类的索引方案不能很好地使用

请参阅论文中的解释。

我建议您使用一种已建立的k-means实现,并且只有在遇到严重问题时才担心速度提高。例如,afaik,sklearn的KMeans是基于Lloyd的原始算法。

可以使用它,但它是不平凡的。大多数人只执行简单的非加速解决方案。

问题是大多数kd树实现只支持最近邻查询。

只有当您拥有大量集群k并在这些集群上构建索引时,这才有回报。

对于完整的kd-tree-k-mans加速,您需要实现二分NN联接,其中您将在点和集群中心上都有一个索引。我不知道有任何kd树实现可以支持这一点。

最新更新