一、概述

  • 前篇:聚类算法之密度聚类(DBSCAN):
  • 在DBSCAN算法中,有两个初始参数ϵϵ(邻域半径)和minPtsminPts(邻域最小样本数)需要手动设置,并且聚类的结果对这两个参数的取值非常敏感,不同的取值将产生不同的聚类结果。
  • 为了克服DBSCAN算法这一缺点,提出了OPTICS算法(Ordering Points to identify the clustering structure)对点排序以此来确定簇结构。
  • OPTICS是DBSCAN的一个扩展算法。该算法可以让算法对半径ϵϵ不再敏感。只要确定minPtsminPts的值,半径ϵϵ的轻微变化,并不会影响聚类结果。
  • OPTICS并不显示的产生结果类簇,而是为聚类分析生成一个排序,这个排序代表了各样本点基于密度的聚类结构。换句话说,从这个排序中可以得到基于任何参数ϵϵminPtsminPts的DBSCAN算法的聚类结果

二、核心距离与可达距离

  • 核心距离:样本点的核心距离是使得其成为核心点的最小半径,即是样本点距离其第minPts个最近的点之的距离:
  • 可达距离:对于样本点x的邻点x1x2xnx_1 、x_2 、…x_n而言,如果他们到点xx的距离大于核心距离,则其可达距离为该点到点xx的实际距离;如果小于核心距离,则其可达距离就是点xx的核心距离
  • 如下图所示:
    【机器学习】密度聚类算法之OPTICS
    其中minPts=3minPts=3,中心点为pp,那么PP点的核心距离是d(1,P)d(1,P),点2的可达距离是d(1,P)d(1,P),点3的可达距离也是d(1,P)d(1,P),点4的可达距离则是d(4,P)d(4,P)的距离

三、OPTICS算法:

  • 两个队列:种子队列结果队列

    • 种子队列用来存储当前所有没用被访问过的样本点的最小可达距离
    • 结果队列用来存储样本点的输出次序。
    • 你可以把种子队列里面放的理解为待处理的数据,而结果队列里放的是已经处理完的数据
  • 算法步骤:

    • 输入:样本集DD,邻域半径ϵϵ,与minPtsminPts
    • 输出:具有可达距离信息的样本点输出排序
    • 第一步:构建结果队列(训练)
      • 这一步可以假设ϵ=+ϵ=+∞,来构建结果队列:
      • 第一步:计算每个样本点的核心距离,并根据核心距离与ϵϵ(输入的常量不是++∞)的关系得到核心点的队列QcoreQ_{core}
      • 第二步:任取一个核心点作为开始节点。将其标为以访问并加入结果队列QorderQ_{order},并将其可达距离记为其核心距离。可达距离队列记为QreachdistQ_{reach_dist}
      • 第三步:计算其余各点相对起始节点的可达距离。并将未访问过点的可打距离放入种子队列QseedQ_{seed}
      • 第四部:循环执行下面操作,直到种子队列QseedQ_{seed}为空:
        • QseedQ_{seed}中取出一个可达距离最小的样本点qq
        • qq标记访问,并加入结果队列
        • 计算每个没用访问过点相对q的可达距离,如果距离变小则更新QseedQ_{seed}QreachdistQ_{reach_dist},用小的可达距离代替大的可达距离。
    • 第二步:输出标签(预测)
      • 按照结果队列的输出顺序,变量整个样本集。
      • 如果当前样本的可达距离不大于给定半径ϵϵ,则该点属于当前类别
      • 如果当前样本的可达距离大于给定半径ϵϵ,则有两种情况:
        • 如果该点的核心距离大于给定半径ϵϵ,则该点为噪声
        • 如果该点的核心距离不大于给定半径ϵϵ,则点属于新的类
  • 将上面得到的结果队列QorderQ_{order}和可达距离队列QreachdistQ_{reach_dist}进行可视化。我们以可达距离为纵轴,样本点输出次序为横轴进行可视化:

    【机器学习】密度聚类算法之OPTICS

    • 簇在坐标轴中表述为山谷,并且山谷越深,簇越紧密
    • 黄色代表的是噪声。

参考链接

代码链接

相关文章: