Grid Growing Clustering Algorithm

对于越来越大的数据量,数据挖掘算法的时间效率成为了一个新的挑战。Grid Growing(http://sse.tongji.edu.cn/zhaoqinpei/)一种基于网格的聚类算法,它把数据空间量化为一定数量的单元,形成了网状结构,所有的聚类操作都是在分出的网格中进行的。它的特点是聚类过程都是基于每一个网格,而独立于数据集,处理速度有了很大的提高。

基本思想

将数据空间分成若干个大小相等的单元,则每个单元包含了一定数量的数据点,接着按照一定方式选取m个种子点,从每个种子点开始,选取与它们相邻的单元,如果那个单元的数据点数大于0,那么将这个单元和这个种子单元划分到相同的簇中,同时,考察这些相邻的单元,递归地将簇扩大,直到不能向外扩展。

  • Grid Growing的输入参数
    1. 需要选取的初始种子单元的数量m
    2. 选取种子单元的方式
    3. 需要将数据空间等分的参数(每个维度需要等分的数量)

在二维空间中,我们可以输入参数Nx和Ny来决定将数据空间分成网格的数量,其中有部分网格是不包含数据的,下图显示了一个将一个二维数据空间分为2 * 2的情况:

这里写图片描述

算法中,选取所有数据点中每个维度的最大值和最小值,并将其差值等分成若干等分。上图中x维度最大值和最小值分别是26和2,那么把x维度分为2个等分,则每个网格在x维度的长度为(26-2) / 2 = 12。

在将数据空间等分为若干网格后,需要这些网格中选取m (m小于网格数)个网格作为种子单元,选取的方式有三种:
1. 选取密度最大的(包含数据点最多)的m个网格,如图3-7中,如果m=1,那么则选取包含6个数据点的那个网格
2. 采取随机的方式选取m个网格
3. 在空间中分布均匀地选取m个网格

在符合高斯分布的数据集中,第一种方法的效果最好,另外两种方法在特定的数据集中也能取得出较好的聚类结果,例如在一些分布整齐的数据集中,方法三的选取方式可能达到最好的效果。

Grid Growing算法最关键的步骤是从种子点开始向外扩展的过程,这也是每个簇形成的过程。下图中,数据空间被分为了8 * 4的32个网格,其中,密度最大的两个网格的编号为(3, 2)和(7, 4),他们分别含有10和13个数据点。

这里写图片描述

在二维网格中,从种子网格考察它周围的八个网格,如果那么网格的密度大于0,那么这个网格和这个种子网格就属于同一个区域(Region),这个区域中的数据点就属于同一个簇,同时将这个网格也作为一个新的种子点进行考察它周围的八个网格,按照这样的方式递归地扩大这个区域,同时也就能扩大了这个簇。
图中,编号为(2, 2)的网格是种子网格(3, 2)的邻居网格,而编号为(1, 1)的网格又是网格(2, 2)的邻居网格,所以它们同属于一个区域。这样,最终的聚类结果:

这里写图片描述

算法伪代码

    Input:数据集D,分割数据空间的大小Nx, Ny, Nz....., 种子网格的个数,选择种子网格的方式
    Output: 所有数据所属簇的编号

    GridGrowingClustering(D, Nx, Ny, random, m){
      Grids = getGrids(D,Nx,Ny)
      SeedGrids = getSeedByRandom(Grids)
      ClusterNumber = 1
      For each seed in SeedGrids{
        if seed is not visited
            mark seed as visited
            neighborhood = getNeighbors(seed, Grids)
            qulifiedNeighborhood = notEmptyNeighors(neighborhood)
            mark qulifiedNeighborhood as visited
            mark ClusterNumber to seed and qulifiedNeighborhood
            ExpandRegion(qulifiedNeighborhood, ClusterNumber,Grids)
            ClusterNumber = ClusterNumber + 1
  }
    }

    ExpandRegion(neighborhood, ClusterNumber,Grids){
      For each grid in neighborhood{
        neighborhood’ = getNeighbors(grid, Grids)
        qulifiedNeighborbood’ = notEmptyNeighbors(neighborhood’)
        mark qulifiedNeighborhood’ as visited
        mark ClusterNumber to qulifedNeighborhood’.clusterNumer
        ExpandRegion(qulifedNeighborhood’, ClusterNumber, Grids)
  } 
}

复杂度

Grid Growing算法在计算过程中需要遍历每一个网格点,因此它的时间复杂度和网格的个数有关,而网格的个数由输入参数决定。
以二维数据考虑,若整个数据集大小为N,将数据空间等分为Nx * Ny的网格,那么计算过程花费的时间为 t = 2N + 9 * Nx * Ny,因此算法的时间复杂度为O(N + Nx * Ny),而多数情况下,我们对Nx和Ny的取值时,都使得Nx * Ny 远小于 N,因此时间复杂可以是O(N),相对于其他聚类算法,具有一定的时间效率优势。

优缺点分析

Grid Growing是基于网格的聚类算法,但兼有DBSCAN的一些特征,总体上,它的

  • 优点:

    1. 算法过程依赖于分割出来的所有网格,而不是所有的数据点,所以和其他聚类算法相比,它的处理速度非常快。
    2. 它扩展簇的方式和DBSCAN相同,均采用从种子点向外扩展的方法来发现簇,因此它可以发现任意形状的簇。
    3. 它对噪声点敏感,开始没有被选为种子网格或者之后没有被扩展到的网格都被认为是噪声,因此聚类结果不易受到噪声的干扰。
  • 缺点:

    1. 输入参数较多,需要花比较长的时间在参数的选取上,一定程度上降低了算法的使用性:将数据空间分割成等分的网格的多少对最终的聚类结果有着很大影响,需要不断尝试,才能得到最优的分割方法。
    2. 种子网格的个数m需要认为指定,全凭个人经验,很多情况下,也需要不断地尝试,最后得到的类簇个数才能接近预期。针对不同类型的数据分布,可以采用不同种子网格的选取方案,但是某些情况下三种方式都不一定能够得到最优的选取。
    3. 综合上面的优缺点,总的说来,这个算法在性能上有好的表现,可以用来处理大规模的数据,同时,也需要不断地尝试不同的参数组从而获得最优解。
Lidar grid聚类是一种将激光雷达(Lidar)数据进行处理和分析的方法。Lidar是一种通过发射激光脉冲并测量其返回时间以获取地物三维位置信息的技术。 在Lidar grid聚类中,首先将Lidar数据划分为若干个网格,每个网格代表一个特定的空间区域。然后,通过对每个网格内的数据进行聚类分析,将相似的数据点分组为一个集群。 Lidar grid聚类的目的是识别出不同的地物或物体,并将它们分组到不同的集群中。这样做有助于对Lidar数据进行进一步的分析和应用。例如,通过将地面点从其他地物点中分离出来,可以更好地进行地形分析和数字高程模型(DEM)生成。 Lidar grid聚类的算法通常基于点云的空间和属性特征,包括点的坐标、反射强度和角度等。常用的聚类方法包括基于欧氏距离的k-means算法和基于密度的DBSCAN算法。 具体的Lidar grid聚类流程可分为以下几个步骤:1. 网格划分:将Lidar数据按照一定的分辨率划分为网格;2. 特征提取:提取每个网格内点的属性特征;3. 相似度度量:计算点之间的相似度或差异度;4. 聚类分析:根据相似度度量,将相似的点分组为一个集群;5. 合并聚类结果:合并邻近的集群,以获得更完整的物体。 总之,Lidar grid聚类是通过将Lidar数据划分为网格,然后对每个网格内的数据进行聚类分析,识别和分组出不同的地物或物体。这种方法在地理信息系统、遥感等领域具有广泛的应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值