前言:
本算法聚簇的中心以和邻居相比来说更高的密度和高密度的点的距离来做指标。
算法特点聚簇中心会自动得到,离群点会自动排除,并且聚簇的识别和它本身的形态以及数据的维度无关。
引子
由已有的一些基于划分、分布、密度的聚类引出本算法。
划分:K-mean等不能搞非球形的数据
分布:基于分布的算法准确性不好确定
密度:能算任意形状,但是DBSCAN这种那个边界值难确定,只能算有坐标系的数据并且计算量大。
本算法像K-means基于距离,又像DBSCAN一样基于密度,并且通过均值偏移方法找聚簇。而且这里的均值偏移方法不要求数据的维度。
该算法的基础是假设簇中心被局部密度较低的邻居所包围,并且这些聚簇中心与局部密度较高的点之间的距离相对较大。
算法流程:
对于每个点算两个值:密度
ρ
i
\rho_{i}
ρi和与密度更高的点中距离最近的点的距离
δ
i
\delta_{i}
δi。
密度
ρ
i
\rho_{i}
ρi是一个点i周围的所有点中与点i距离小于一个常数
d
c
d_{c}
dc的点个数。
即
ρ
i
=
∑
j
(
d
i
j
−
d
c
<
0
)
\rho_{i}=\sum_{j}(d_{ij}-d_{c}<0)
ρi=∑j(dij−dc<0)。
δ
i
=
min
j
:
p
j
>
p
i
(
d
i
j
)
\delta_{i}=\min_{j:p_{j}>p_{i}}(d_{ij})
δi=minj:pj>pi(dij)
密度最大的点的
δ
i
\delta_{i}
δi值赋值为与离它最远的点的距离。
因此显然
δ
i
\delta_{i}
δi值与周围点比较相对大的点并且
ρ
i
\rho_{i}
ρi相对大的点是聚簇中心。
聚簇中心的确定要借助决定图:横坐标为密度
ρ
\rho
ρ,纵坐标为
δ
\delta
δ的图。
显然图中右上角的点为聚簇中心点,左上角的点为离群点。
聚簇中心找到后则将每个点赋给离它最近的 ρ \rho ρ值更高的聚簇中心点。
为了防止低密度的聚簇中心出现,再对每一个聚簇中心画出一个区域,这个区域中的点是这个聚簇中心的点,但是这个区域里的点和其他某些聚簇中心之间的距离小于 d c d_{c} dc。定义 ρ b \rho_{b} ρb为这个区域里密度最高的点的密度,那么在这个聚簇中心的附属点中密度大于 ρ b \rho_{b} ρb的点定义为聚簇核心,为鲁棒性很强的点,其他点认为是“光环”。
基准测试
一、
Fig.2.A
背景部分以及几个分布的边界部分概率我20%,此分布的特点是数据非球形、分布的“尖峰”重叠。
Fig.2.B和Fig.2.C显示了根据此分布生成的4000和1000点的样例用此算法聚合的情况。D和E分别是B和C的决定图。发现效果很好。
为了展示此算法的鲁棒性,基于图A的分布生成10000个点。从1000到10000每次增加1000个点。F图横坐标是点的个数,纵坐标是分类分错的点的比例,可以发现1000的时候点的分类错误率就很小了。
对于4000点的图Fig.2.B,如果改变
d
c
d_{c}
dc还是会得到相对不变的聚簇分类(影响的主要是噪音部分,会把噪音部分加到“光环”区域里,但是基本不会改变
ρ
b
\rho_{b}
ρb的值)。
经验上讲, d c d_{c} dc的选择让每个点的平均邻居个数为总点数的1%~2%之间。(这个真不知道为啥)。点数很少的时候需要更有效的方法估算密度。
为了测验少数点,用幂指数核函数(点少性质不明显,用非线性核函数投影一下)
Fig.3显示了各种鸡贼数据。
本算法的鲁棒性还体现在对度量标准的不敏感。因为尽管 δ i \delta_{i} δi的值会变,但是决定图的结构不会变。
因为这个算法不需要参数化概率分布和多维密度函数,因此这个算法不会对数据的维度敏感。
在跑Olivetti Face这个数据集时这个算法表现的不好。因为每张脸十张照片导致数据的大小能和聚簇中心的大小媲美,数据很小,所以密度难算。图片的相似度用论文19算(没看),并用高斯核函数映射。为了减小数据集过小产生的影响,赋给聚簇中心的规则加强为赋值给每个聚簇之间的点之间的两辆距离小于 d c d_{c} dc。
图Fig.4.A是这个人脸数据库的决定图,因为数据少所以聚簇中心不好分。图Fig.4.B是横坐标0到100(前100个样例),纵坐标
γ
i
=
ρ
i
δ
i
\gamma_{i}=\rho_{i}\delta_{i}
γi=ρiδi的乘积(图A中最大的点没画进来,太离群了)。根据图B发现九个点以后的点都挤在一起了,于是选9个聚簇中心。
但是跑400个图的时候发现很难决定聚簇个数(Fig.S9显示了任然用画出
γ
i
\gamma_{i}
γi的方式选出了30个聚簇中心)。然后通过选不同的聚簇数量最后得出这个算法能分出30个人脸。聚簇选的多会造成同一个脸包含多个聚簇,但是每个聚簇的脸还是对的。图Fig.S9显示了在用加强规则和不用的情况下的结果:加强下
r
f
a
l
s
e
r_{false}
rfalse几乎为0但是
r
t
r
u
e
r_{true}
rtrue很小。正确规则下
r
f
a
l
s
e
r_{false}
rfalse为个位数,比
r
t
r
u
e
r_{true}
rtrue小很多。
最后统计结果为如果不用加强的点赋给聚簇中心的规则而是用原来的版本,那么这个算法效果和当前最先进的算法效果相仿。
下一个基准测试的数据集是三丙氨酸在300k时的分子动力学轨迹。传统研究动能方程的算法和此算法都分出了有八个动能盆地。
最后
基于密度的算法在处理有限的随机生成(均匀分布)的数据时还是会产生聚簇中心。但是决定图可以帮助区分聚簇中心和随机数据的"涟漪"。
三位立方体内生成随机的均匀点,点的距离用"周期边界"算(就是最左边和最右边、最下边和最上边的点视为相邻的)。
γ
i
=
ρ
i
δ
i
\gamma_{i}=\rho_{i}\delta_{i}
γi=ρiδi的幂指数和数据维度的幂指数几乎线性相关。(因为每多一个维度都会大概多相应比例相邻的点,
δ
\delta
δ又和
ρ
\rho
ρ和距离有关emmmmm,凑一凑大概就是幂指数级别的了)。
有确定聚簇的数据就不满足这一特性(大概就是在
γ
i
\gamma_{i}
γi和数据的维度在
γ
i
\gamma_{i}
γi值大的时候没啥关系,突变转折的地方就是聚簇中心),这一发现可能会为这个算法能自动找到聚簇中心的特性证明,并且在统计上验证用我们的方法进行的分析的可靠性。
应用
学完了我写了一个图片压缩