码迷,mamicode.com
首页 > 编程语言 > 详细

K-d 树对聚类算法进行预处理

时间:2015-03-19 18:02:21      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

在用聚类算法如k-means对数据进行聚类处理的时候,按照一般的处理方法,需要将每个数据跟其他所有的元素进行比较,计算相似度,然后才能聚类。

假定有N个元素,则需计算N*(N-1)/2 次,当N非常大的时候,则非常消耗时间,这种时候,可以使用K-d树数据结构,对所有数据进行重新组织,构成一棵而叉树。

k-d树的构建,最典型的方法如下:

  • 随着树的深度轮流选择轴当作分区面。(例如:在三维空间中根节点是 x 轴垂直分区面,其子节点皆为 y 轴垂直分区面,其孙节点皆为 z 轴垂直分区面,其曾孙节点则皆为 x 轴垂直分区面,依此类推。)
  • 点由垂直分区面之轴座标的中位数区分并放入子树

例如有一个20个数据的数据集,每个数据都是一个3维的向量(x,y,z)。在构建k-d树的时候,第一轮,先查看所有数据x的值,取20个x的中位数,将所有数据切分成2个集合,然后分别对两个集合进行处理,取每个集合中元素y的值的中位数,将每个集合进行切割,最后对所得集合进行第三轮处理,每个集合取所有z的值的中位数,对集合进行切割。每次切割,比中位数小的节点构成一个集合,比中位数大的节点构成一个集合。最终这些集合构成一个二叉树。

k-d树最邻近搜索的过程如下:

  1. )从根节点开始,递归的往下移。往左还是往右的决定方法与插入元素的方法一样(如果输入点在分区面的左边则进入左子节点,在右边则进入右子节点)。
  2. )一旦移动到叶节点,将该节点当作"目前最佳点"。
  3. )解开递归,并对每个经过的节点运行下列步骤:

(1) 如果目前所在点比目前最佳点更靠近输入点,则将其变为目前最佳点。

(2) 检查另一边子树有没有更近的点,如果有则从该节点往下找

  1. 当根节点搜索完毕后完成最邻近搜索

K-d 树对聚类算法进行预处理

标签:

原文地址:http://www.cnblogs.com/yulele/p/4350971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!