zoukankan      html  css  js  c++  java
  • Canopy聚类算法

    Canopy聚类算法(经典,看图就明白)

    聚类算法。

    这个算法获得的并不是最终结果,它是为其他算法服务的,比如k-means算法。它能有效地降低k-means算法中计算点之间距离的复杂度。

      图中有一个T1,一个T2,我们称之为距离阀值,显然T1>T2,这两个值有什么用呢?我们先确定了一个中心,然后计算其他点到这个中心间的距离,当距离大于T1时,小于T1大于T2时,小于T2时,对这个点的处理都是不一样的。

    算法伪代码:

    while D is not empty
          select element d from D to initialize canopy c
          remove d from D
          Loop through remaining elements in D
               if distance between d_i and c < T1 : add element to the canopy c
               if distance between d_i and c < T2 : remove element from D
          end
          add canopy c to the list of canopies C
    end

    D指代一组数据,d_i表示D中的各个数据。

    1:给我一组存放在数组里面的数据D

    2:给我两个距离阈值T1,T2,且T1>T2

    3:随机取D中的一个数据d作为中心,并将d从D中移除

    4:计算D中所有点到d的距离distance

    5:将所有distance<T1的点都归如到d为中心的canopy1类中(注意哦,小于T2的也是小于T1的,所以也是归入到canopy1中的哦)

    6:将所有distance<T2的点,都从D中移除。(这一步很关键的,你回去看上面那个图,就明白了)

    7:重复步骤4到6,直到D为空,形成多个canopy类

    关键点在于t1,t2:

    当与中心的距离大于T1时,这些点就不会被归入到中心所在的这个canopy类中。

    然当距离小于T1大于T2时,这些点会被归入到该中心所在的canopy中,但是它们并不会从D中被移除,也就是说,它们将会参与到下一轮的聚类过程中,成为新的canopy类的中心或者成员。亦即,两个Canopy类中有些成员是重叠的。

    而当距离小于T2的时候,这些点就会被归入到该中心的canopy类中,而且会从D中被移除,也就是不会参加下一次的聚类过程了。

  • 相关阅读:
    Bit命令
    Leetcode628. 三个数的最大乘积
    MyBatis中一级缓存和二级缓存
    Docker学习-实战MySQL数据同步
    Docker学习-容器数据卷的使用
    我的健康计划【要常看啊】
    ASCII编码对照表
    KMP算法详解
    Docker学习-制作一个自己的镜像
    Docker学习-Docker镜像的分层原理
  • 原文地址:https://www.cnblogs.com/34fj/p/8984122.html
Copyright © 2011-2022 走看看