zoukankan      html  css  js  c++  java
  • K-d 树对聚类算法进行预处理

    在用聚类算法如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. 当根节点搜索完毕后完成最邻近搜索
  • 相关阅读:
    node.js结合wechaty实现微信机器人[基础篇]
    .env文件为NodeJS全局环境变量
    基于jquery实现一个提示插件
    Puppeteer实现一个超简单的自动化机器人
    Vue高仿阿里动态banner,制作组件
    css不常用属性
    Vue表单校验失败滚动到错误位置
    C# Func委托
    深入解析C# 4th 笔记(第一章)
    C# 笔记 XML基础
  • 原文地址:https://www.cnblogs.com/yulele/p/4350971.html
Copyright © 2011-2022 走看看