聚类(kmeans,DBSCAN,OPTICS)

2020-05-27  本文已影响0人  Jasmine晴天和我

聚类

K-means聚类

样本集D={x_1,x_2,...,x_m},聚类簇数k。

从D中随机选择k个样本作为初始均值向量{\mu_1,\mu_2,...,\mu_k}

C_i=\varnothing(1\leq i\leq k)

for j =1,2,...m

计算样本x_j与各均值向量\mu_i的距离

距离最近的均值向量,就确定了x_j的簇标记,并加入相应的簇中。

计算新的均值向量,继续按照上述步骤划分,直到均值向量不再被更新。

形象的解释:

DBSCAN密度聚类

给定参数\epsilon,minpts

核心对象:若x_i\epsilon邻域内至少包含minpts个样本,则x_i是一个核心对象。

密度直达:若x_j位于x_i\epsilon邻域内,并且x_i是核心对象,则称x_jx_i密度直达。

密度可达:对于x_jx_i,若存在样本序列p_1,p_2,...p_n其中p_1=x_i,p_n=x_jp_{i+1}p_i密度直达,则称x_jx_i密度可达。

密度相连:对x_jx_i,若存在x_k使得x_jx_i均由x_k密度可达,则称x_jx_i密度相连。

边界点:如果一个对象在其半径eps内含有点的数量小于minpts,但是该对象落在核新对象的邻域内,则该对象为边界点。

簇:由密度可达关系导出的最大的密度相连样本集合。

若x是核心对象,由x密度可达的所有样本组成的集合X就是满足连接性与最大性的簇

先找到满足核心对象的集合\Omega,从\Omega中随机选取一个核心对象作为种子,找到由它密度可达的所有样本,这就构成了第一个聚类簇,并将刚刚选取的核心对象从\Omega中去除,如此类推,直到\Omega为空。

optics

只有核心对象有核心距离和可达距离。

核心距离:如果样本对象x_i是核心对象,那么x_i的核心距离,就是使样本x_i能够成为核心对象的最小半径值\epsilon参数。使得x_i成为核心对象的最小距离,不是之前设定的\epsilon参数,核心距离小于等于\epsilon参数,样本x_i\epsilon邻域内可能有多于minpts个样本,但是我们只取半径范围内恰好有minpts样本的半径值\epsilon作为其核心距离。

可达距离:x_i和p的可达距离指:核心距离和两点欧式距离的最大值。

image.png

样本x_i与样本p_1的可达距离:在核心距离\epsilon^{'}p_1欧几里得距离选较大的那个,选择核心距离。

样本x_i与样本p_2的可达距离:在核心距离\epsilon^{'}p_2欧几里得距离选较大的那个,选择欧几里得距离。

密度越大,从相邻节点直接密度可达的距离就越小。optics算法用一个可达距离升序排列的有序种子队列迅速定位稠密空间的数据对象。

较稠密簇中的对象在簇排序中相互靠近;

一个对象的最小可达距离给出了一个对象连接到一个稠密簇的最短路径。

min_samples:一个点要成为核心点其邻域内至少点的数量

max_eps:最大半径

metric:距离矩阵,设置使用哪些距离,例如欧氏距离,曼哈顿距离等。如果使用自己定义的距离,需要设置为"precomputed",然后对距离矩阵进行训练。

p:p=1曼哈顿距离,p=2欧式距离,任意的p使用闵式距离。

cluster_method:从可达性和排序结果,提取簇的方法,可以选择"xi"或者'dbscan'

eps:半径

xi:确定可达性图上的最小陡度,构成集群边界。

步骤:(根据不同的max_eps设定,最后得到的结果不同,eps基本不对算法结果产生影响)

1.先找出所有的核心对象,放在核心对象队列中。当max_eps设置默认为inf时,所有的点都能成为核心对象;当max_eps设置的较小时,就有一些点无法成为核心对象并且可能也不是其他核心对象的直接可达对象,这些点的可达距离全部为inf。

2.在核心对象队列中随机选择一个核心对象,第一个被处理的点是不存在可达距离的,所以设置其可达距离为inf。其在原数据集中的次序放入结果序列中,找到全部的直接密度可达点,并计算所有直接可达点的可达距离,放进有序队列中,按照可达距离升序排列。如果核心对象队列中的元素都已经被处理,算法结束。

3.在有序队列中选择可达距离最小的点,其在原数据集中的次序放入结果队列中,并将其在有序队列中删除。若有序队列为空,则算法结束。

3.1 判断该点是否是核心对象,如果是,找到其所有的直接密度可达点,如果其密度可达点已存在于有序队列中,并且此时的可达距离小于旧的可达距离,则用新的可达距离取代旧的可达距离。并且将有序列表中的点按照可达距离重新排序。

3.2如果不是核心对象,则寻找第二小的直接可达点。其在原数据集中的次序放入结果队列中,并将其在有序队列中删除,并按照3.1处理该点。

本文章参考了多位博主的文章,如有雷同麻烦联系我删除。

上一篇下一篇

猜你喜欢

热点阅读