📜  毫升 | OPTICS 聚类说明

📅  最后修改于: 2022-05-13 01:54:43.318000             🧑  作者: Mango

毫升 | OPTICS 聚类说明

先决条件: DBSCAN 集群

OPTICS Clustering 代表Ordering Points To identify Cluster Structure 。它从 DBSCAN 聚类算法中汲取灵感。它为 DBSCAN 聚类的概念增加了两个术语。他们是:-

  1. 核心距离:将给定点分类为核心点所需的半径的最小值。如果给定点不是核心点,那么它的核心距离是未定义的。

  2. 可达距离:它是相对于另一个数据点 q(Let) 定义的。点 p 和 q 之间的可达距离是 p 的核心距离和 p 和 q 之间的欧几里得距离(或其他一些距离度量)的最大值。请注意,如果 q 不是核心点,则不定义可达距离。

这种聚类技术不同于其他聚类技术,因为这种技术没有明确地将数据分割成簇。相反,它会生成可达距离的可视化,并使用此可视化对数据进行聚类。

伪代码:

以下伪代码已从算法的维基百科页面中引用。

OPTICS(DB, eps, MinPts)

    #Repeating the process for all points in the database
    for each point pt of DB

       #Initializing the reachability distance of the selected point
       pt.reachable_dist = UNDEFINED
    for each unprocessed point pt of DB

       #Getting the neighbours of the selected point
       #according to the definitions of epsilon and
       #minPts in DBSCAN
       Nbrs = getNbrs(pt, eps)

       mark pt as processed
       output pt to the ordered list

       #Checking if the selected point is not noise
       if (core_dist(pt, eps, Minpts) != UNDEFINED)

          #Initializing a priority queue to get the closest data point
          #in terms of Reachability distance
          Seeds = empty priority queue

          #Calling the update function
          update(Nbrs, pt, Seeds, eps, Minpts)

          #Repeating the process for the next closest point
          for each next q in Seeds
             Nbrs' = getNbrs(q, eps)
             mark q as processed
             output q to the ordered list
             if (core_dist(q, eps, Minpts) != UNDEFINED)
                update(Nbrs', q, Seeds, eps, Minpts)

更新函数的伪代码如下:

update(Nbrs, pt, Seeds, eps, MinPts)

    #Calculating the core distance for the given point
    coredist = core_dist(pt, eps, MinPts)

    #Updating the Reachability distance for each neighbour of p
    for each obj in Nbrs
       if (obj is not processed)
          new_reach_distance = max(coredist, dist(pt, obj))

          #Checking if the neighbour point is in seeds
          if (obj.reachable_dist == UNDEFINED)

              #Updation step
              obj.reachabled_dist = new_reach_distance
              Seeds.insert(obj, new_reach_distance)
          else               
              if (new_reach_distance < obj.reachable_dist)

                 #Updation step
                 o.reachable_dist = new_reach_distance
                 Seeds.move-up(obj, new_reach_distance)

OPTICS 集群与 DBSCAN 集群:

  1. 内存成本: OPTICS 集群技术需要更多内存,因为它维护一个优先级队列(Min Heap)来确定下一个数据点,该数据点在可达距离方面最接近当前正在处理的点。它还需要更多的计算能力,因为最近邻查询比 DBSCAN 中的半径查询更复杂。
  2. 更少的参数: OPTICS 聚类技术不需要维护 epsilon 参数,仅在上面的伪代码中给出,以减少花费的时间。这导致参数调整的分析过程减少。
  3. 这种技术不会将给定的数据分成集群。它仅产生一个可达距离图,并根据程序员的解释对点进行相应的聚类。