算法目的
该算法是一种改进k-means聚类的算法,其减少了算法中距离计算的次数并提高了算法运行速度。
具体算法
k-means
- 分配步骤:设置K个初始中心点,把每个点分配到距离最近的中心点所在簇。
- 更新步骤:用簇中所有的点更新中心点,再把每个点分配到距离最近的中心点所在簇。直到更新前后的中心点差别不大时,整个算法结束。
ball k-means
相关概念
- 球簇:中心点和半径以及所围区域里面的点,共同组成一个球簇。
“Definition 1: Given a cluster C, we call C as a ball cluster
by defining its centroid c and radius r as follows:”
c = 1 ∣ C ∣ ∑ i = 1 ∣ C ∣ x i , r = max ( ∥ x i − c ∥ ) c=\frac{1}{|C|} \sum_{i=1}^{|C|} x_{i}, r=\max \left(\left\|x_{i}-c\right\|\right) c=∣C∣1i=1∑∣C∣xi,r=max(∥xi−c∥)
“where x i x_{i} xi is a point that assigned to C, and |C| denotes
the number of samples in C.”
用超球体这种最简单的模型(不管数据多少维,只有半径和中心两个参数)来量化和表示簇,可以获得更精确的空间关系刻画。
- 近邻球簇:两个中心点的距离小于哪个球簇的半径,另外一个球簇就是它的近邻球簇。
1 2 ∥ c i − c j ∥ < r i \frac{1}{2}\left\|c_{i}-c_{j}\right\|<r_{i} 21∥ci−cj∥<ri
公式所示, c j c_{j} cj所在球簇是 c i c_{i} ci所在球簇的近邻球簇。
根据公式,我们可以从图中看出,对于 C 1 C_{1} C1来说,他没有近邻,对于 C 2 C_{2} C2, C 3 C_{3} C3是它的近邻,对于 C 3 C_{3} C3, C 2 C_{2} C2和 C 1 C_{1} C1都是它的近邻, C 4 C_{4} C4没有近邻。
具体实现
1)初始 k 个聚类中心,进行一次k-means聚类。
2)更新聚类中心,计算新旧中心点之间的距离
δ
\delta
δ。计算半径,生成球簇。
3)初始球簇中心距离矩阵,如果
dist
(
c
i
(
t
)
,
c
j
(
t
)
)
<
2
r
i
(
t
)
\operatorname{dist}\left(c_{i}^{(t)}, c_{j}^{(t)}\right)<2 r_{i}^{(t)}
dist(ci(t),cj(t))<2ri(t),则认为
c
j
c_{j}
cj所在簇是
c
i
c_{i}
ci所在簇的近邻。
4)把有近邻的球簇分为两个区域,稳定区域(在下次迭代中不会移动)和活动区域(可能会被分到近邻球簇中)。把每个球簇的近邻根据距离进行从小到大的排序,稳定区域的边界由距离最近的近邻球簇中心之间的距离的一半为半径作圆形区域,其域内的点不变。活动区域形成环,每个环的边界由从小到大的近邻球簇的中心距离的一半作为半径围成圆确定,如下图所示。
5)稳定区域内点不变,第一层环内的点只能被分到本身或距离最近的近邻,依次计算距离,离谁中心近就分配给谁。第二层环内点,只能被分配到本身和距离第一近和次二近的近邻中,计算到各自的中心距离,谁近分配给谁,第 i 层环内点,只能分配给本身和前 i 近的近邻中。
6)更新中心点,重复第二步。
7)如果
dtist
(
c
i
(
t
−
1
)
,
c
j
(
t
−
1
)
)
≥
2
r
i
(
t
)
+
δ
(
c
i
(
t
)
)
+
δ
(
c
j
(
t
)
)
\operatorname{dtist}\left(c_{i}^{(t-1)}, c_{j}^{(t-1)}\right) \geq 2 r_{i}^{(t)}+\delta\left(c_{i}^{(t)}\right)+\delta\left(c_{j}^{(t)}\right)
dtist(ci(t−1),cj(t−1))≥2ri(t)+δ(ci(t))+δ(cj(t))
就不计算
c
i
c_{i}
ci和
c
j
c_{j}
cj新一轮的距离,直接赋值为
dist
(
c
i
(
t
)
,
c
j
(
t
)
)
=
dist
(
c
i
(
t
−
1
)
,
c
j
(
t
−
1
)
)
−
δ
(
c
i
(
t
)
)
−
\operatorname{dist}\left(c_{i}^{(t)}, c_{j}^{(t)}\right)=\operatorname{dist}\left(c_{i}^{(t-1)}, c_{j}^{(t-1)}\right)-\delta\left(c_{i}^{(t)}\right)-
dist(ci(t),cj(t))=dist(ci(t−1),cj(t−1))−δ(ci(t))−
δ
(
c
j
(
t
)
)
\delta\left(c_{j}^{(t)}\right)
δ(cj(t))。否则就要计算两个中心点的距离。
8)重复4)~5)步,直到所有的簇都是稳定区域,无活动区域为止,算法结束。
算法优点
- 减少了计算距离次数,避免了每一次迭代都要计算每个点到中心点的距离。
- 减少了每次球簇中心点之间计算距离次数。上面第7)步体现。
原文链接:https://ieeexplore.ieee.org/document/9139397