减法聚类
算法概述
减法聚类算法(Subtractive Clustering Method)是一种不需要提前规定聚类数、只需根据样本数据即可快速决定聚类中心的一种密度聚类算法。该算法把所有样本数据点作为聚类中心的候选点,利用密度函数计算每个候选点的密度指标,选取其中密度指标最大的点作为聚类中心,再去掉已知选择的聚类中心,计算剩余点的密度指标,选取其中密度指标最大的点作为下一个聚类中心。不断重复上述过程,直到满足收敛条件$^{[1]}$。最终即可得到的已知数目的聚类中心。
具体实现流程
Step1:已知n个处于m维空间的数据样本点 $(x_1,x_2,…,x_n)$,每个数据点都是候选聚类中心,定义数据点 $x_i$ 处的密度指标为:
$$
D_i=\sum_{j=1}^n\exp(-\frac{|x_i-x_j|^2}{(r_a/2)^2})
$$
其中 $r_a$ 是一个常数,一个数据点的邻近数据点越多,该数据点的密度指标越大。$r_a$ 也可以理解为以 $x_i$ 数据点为中心,以 $r_a$ 为半径的圆形区域,区域以外的数据点对该点的密度指标影响较小。Step2:按照上式计算得到各个样本点的密度指标,密度指标最大的点定义为聚类中心 $c_k$ ,其密度指标为 $D_{c_k}$ 。此时 $k=1$ ,那么每一个数据点 $x_i$ 的密度指标可用以下公式进行更新:
$$
D_i = D_i - D_{c_k}\exp{(-\frac{|x_i-x_{c_k}|^2}{(r_b/2)^2})}
$$
其中 $r_b$ 是一个常数。可以看出,经过更新公式重新计算密度指标后,靠近聚类中心 $c_k$ 的数据点密度指标明显减小了,这样做的好处是可以避免其成为下一个聚类中心。$r_b$ 定义了一个密度指标显著减小的影响范围$^{[2]}$。Step3:根据更新修正后的样本数据点密度指标,找出最大值$D_{max}=\max(D_i)$,选出下一个聚类中心$c_{k+1}$,重复Step2进行更新修正。
Step4:不断迭代计算修正后的密度指标最大值 $D_{max}$ ,直到满足下式:
$$
\frac{D_{max}}{D_{c_1}}<\delta
$$
则迭代结束,最终聚类个数为 $K=k$ 。一般取$\delta\ge0.5$ 效果较好。
关于Step1和Step2中的$r_a, r_b$ 可通过如下方法进行确定:
$$
r_a=r_b=\frac{1}{2}\min_j{\max_i(|x_i-x_j|)}
$$
其中 $r_a、r_b$ 取样本集合最中间的样本到距离它最远的样本之间距离的一半$^{[3]}$。
代码实现
为了避免太多循环操作,代码中尽量使用矩阵计算。
首先,创建CSM减法聚类方法类。
1 |
|
ok,直接开始测试。测试部分代码参考了这篇文章$^{[5]}$。
1 |
|
测试结果如下图所示。
总结
欧式距离矩阵求解
矩阵运算很好用,能避免for循环,提升运算效率。本代码中距离矩阵构建方法参见文章$^{[4]}$。
参考
[1] 马慧,赵捧未,王婷婷. 语义减法聚类研究[J]. 计算机工程与科学,2016,38(9):1924-1929. DOI:10.3969/j.issn.1007-130X.2016.09.027.
[2] 袁银莉. 改进的模糊聚类算法[J]. 绍兴文理学院学报,2009,29(10):46-49. DOI:10.3969/j.issn.1008-293X.2009.10.012.
[3] 邵堃侠,郭卫民,杨宁,等. 基于K-means算法的RBF神经网络预测光伏电站短期出力[J]. 上海电机学院学报,2017,20(1):27-33. DOI:10.3969/j.issn.2095-0020.2017.01.006.
[4] https://blog.csdn.net/LoveCarpenter/article/details/85048291
[5] https://blog.csdn.net/qq_41938858/article/details/87738035
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!