密度聚类的一种,是DBSCAN聚类的改进算法,其对输入参数不敏感。
OPTICS聚类:有效的解决了密度不同导致的聚类效果不好的问题。
OPTICS也需要密度和半径两个参数,使用这两个参数确定核心对象。
核心距离:只有核心对象才有核心距离,在核心对象中,最小邻域内密度达到阈值时的半径值。
如果样本的核心距离小于半径则为核心点,否则不是核心点。
欧几里得距离:核心对象到点 p 的欧几里得距离。
可达距离:只有核心对象才有可达距离,用于对样本点排序;
核心对象到 p 的可达距离是欧几里得距离和核心距离中较大的值
核心距离内 : 样本 O 与其核心距离内的样本的可达距离都是核心距离值 ;
核心距离外 ( 半径ε-邻域内 ) : 样本 O 与其核心距离外的样本的可达距离都是
样本 O 与其的欧几里得距离 ;
聚类顺序 : 从 低层 到 高层 ; 从 稠密 到 稀疏 ;
聚类时 , 低层 聚类分组 先构建完成 , 也就是半径 ε 参数较小的聚类分组 ;
密度可达的两种情况情况 :
① ε 参数小 : ε 参数较小的时两个样本就密度可达 ;
② ε 参数大 : ε 参数取值很大时 , 才密度可达 ;
扩展样本优先级 : 扩展样本对象时 , 优先选择第一种情况 , ε 参数较小的时就可密度可达的样本 ;
每个样本对象需要存储两个值 : 核心距离 与 可达距离 ;
聚类过程:
1. 定义两个队列,有序队列,存储核心点及密度直达点,按可达距离升序排列;
结果队列存储样本点输出次序;有序队列中的点为待处理样本,结果队列中的点为处理后样本。
2. 选取未处理的核心点放入结果队列,计算邻域样本的可达距离,
按可达距离升序将样本点依次放入有序队列。
3. 从有序队列中提取第一个样本,如果为核心点则计算可达距离,
将可达距离最小放入结果队列;如果不是核心点则跳过该点,选取新的核心点,重复第二步。
4. 迭代第二、三步,直到处理所有样本点,输出结果队列中的样本点及可达距离。
OPTICS聚类继承了DSCAN聚类的优点并增强了其稳定性。
>>> from sklearn.cluster import OPTICS
>>> import numpy as np
>>> X = np.array([[1, 2], [2, 5], [3, 6], [8, 7], [8, 8], [7, 3]])
>>> clustering = OPTICS(min_samples=2).fit(X)
>>> clustering.labels_
array([0, 0, 0, 1, 1, 1])
参考:
https://blog.csdn.net/z962013489/article/details/86593031