densityPeak密度聚类算法实现原理

DP算法的核心思想:密度比邻居节点高、与比其密度大的点的距离相对大的点是聚类中心。

每个样本在密度聚类中,以一个点的形式存在。这个N维空间中的点具备两大要素。
1.密度:在指定半径内出现的邻居数量
2.距离值:与其他比自己密度大的点的距离最小值。

1.1一般计算密度有基于截断距离的密度公式计算:


image.png

其中:


image.png

dc指的是指定的半径大小,dij是样本i和j之间的距离

1.2另有基于高斯核函数的密度计算:

image.png

2.根据定义,距离值的计算如下:

image.png

上述公式无法计算密度最大的点的距离值,定义如下:

image.png

过程解析:
首先,dp算法需要生成两个点之间的距离矩阵。所以100个样本就要计算100平方次运算,以及对应的内存空间。

其次,找出每个样本点的密度个数,根据公式计算每个点的距离值。这样,每个样本点都包含密度值和距离值。

经过上一步骤能够得到一个二维的数据,选择两个值都比较大的点,就是我们想要的聚类中心。如下图所示:


image.png

A图中是数据样本点,B图是每个样本点的密度值和距离值。可以从B图比较直观的看出,10 和 1 两个样本点就是我们想要的聚类中心。像28这样的点,虽然距离虽然很大,但是密度很小,很有可能是噪声点。

最后根据聚类中心找到属于各自类的样本点。到此,算法结束。

dc的选取
一般来说,我们可以选择dc使得点的平均邻居数大概是数据集中点的总数的1-2%。

算法优点
算法复杂度上也比一般的K-means算法的复杂度低。类簇中心找到后,剩余的每个点被归属到它的有更高密度的最近邻所属类簇。类簇分配只需一步即可完成,不像其它算法要对目标函数进行迭代优化。
算法缺点
需要事先计算好所有点与点之间的距离。如果样本太大则整个距离矩阵的内存开销特别大,因此如果只需要得到最终聚类中心,则可以考虑牺牲速度的方式计算每一个样本点的避免直接加载距离矩阵。

你可能感兴趣的:(densityPeak密度聚类算法实现原理)