一、简介
题目: Learning the
k
k
k in
k
k
k-means
会议: NIPS 2003
任务: 估计无标签数据的类别数量并聚类。
Idea: 假设一个簇的数据服从同一个高斯分布,给定预估的类别数下界,从下界开始做一次
k
k
k-means,再对每个簇进行
k
k
k-means(
k
=
2
k=2
k=2)得到两个簇中心,连接两个簇中心得投影向量,计算该簇所有样本在投影向量上的投影并将投影归一化,之后通过Anderson-Darling检验判断
k
k
k应该等于2还是1,如此往复直至所有检验都不接受进一步的分割。
如图,为G-means的算法流程,下节做详细介绍。
二、详情
1. 算法步骤
输入:无标签数据
D
D
D,预估类别数下界限
K
min
K_{\min}
Kmin。
输出:预测的类别数量和聚类结果。
(1)初始化
k
n
e
w
=
K
min
,
α
=
0.0001
k_{new}=K_{\min},\alpha=0.0001
knew=Kmin,α=0.0001;
(2)设定
k
=
k
n
e
w
k=k_{new}
k=knew,执行一次
k
k
k-means,形成
k
n
e
w
k_{new}
knew个簇;
(3)对于每个簇,初始化两个中心(初始化方法见下节)并在此基础上执行
k
k
k-means(
k
=
2
k=2
k=2);
(4)每个簇都被分割为2个新簇并得到两个新的簇中心
c
1
c_1
c1和
c
2
c_2
c2,连接它们得各簇的投影向量
v
=
c
1
−
c
2
v=c_1-c_2
v=c1−c2;
(5)计算各簇数据在各自投影向量上的投影
x
i
′
=
⟨
x
i
,
v
⟩
/
∥
v
∥
2
x_i^\prime=\langle x_i,v\rangle/\|v\|^2
xi′=⟨xi,v⟩/∥v∥2并将投影归一化(均值为0,方差为1)为
x
i
′
x_i^\prime
xi′;
(6)分别对各簇的
x
i
′
x_i^\prime
xi′进行排序得
x
(
i
)
′
x^\prime_{(i)}
x(i)′,令
z
i
=
F
(
x
(
i
)
′
)
z_i=F(x_{(i)}^\prime)
zi=F(x(i)′),
F
F
F为
N
(
0
,
1
)
N(0,1)
N(0,1)的分布函数(Cumulative Distribution Function, CDF);
(7)进行Anderson-Darling检验,计算各簇的
A
∗
2
(
Z
)
A_*^2(Z)
A∗2(Z),公式如下:
A
∗
2
(
Z
)
=
A
2
(
Z
)
(
1
+
4
/
n
−
25
/
n
2
)
A_*^2(Z)=A^2(Z)(1+4/n-25/n^2)
A∗2(Z)=A2(Z)(1+4/n−25/n2)其中,
A
2
(
Z
)
=
−
1
n
∑
i
=
1
n
(
2
i
−
1
)
[
log
(
z
i
)
+
log
(
1
−
z
n
+
1
−
i
)
]
−
n
A^2(Z)=-\frac{1}{n}\sum_{i=1}^n(2i-1)[\log(z_i)+\log(1-z_{n+1-i})]-n
A2(Z)=−n1i=1∑n(2i−1)[log(zi)+log(1−zn+1−i)]−n对于一个簇来说,如果
A
∗
2
(
Z
)
A_*^2(Z)
A∗2(Z)大于
α
=
0.0001
\alpha=0.0001
α=0.0001时的临界值,则拒绝
H
0
H_0
H0:数据来自同一个高斯,即认为数据并非来自同一个高斯分布,于是
k
n
e
w
=
k
n
e
w
+
1
k_{new}=k_{new}+1
knew=knew+1;否则,接受
H
0
H_0
H0,保持原簇不变;
(8)如果(7)中
k
n
e
w
k_{new}
knew没有增加则算法终止;否则,转(2)。
2. 初始化簇中心
假设原簇中心为
c
c
c,如果要将原簇分割为两个新簇,首先要初始化两个新簇的中心,记为
c
±
m
c\pm m
c±m。关于
m
m
m,作者给出两个做法:
(1)与
c
c
c尺度相同的随机向量,并且
∥
m
∥
\|m\|
∥m∥不能过大导致数据失真;
(2)
m
=
s
2
λ
/
π
m=s\sqrt{2\lambda/\pi}
m=s2λ/π,
s
s
s为主成分,
λ
\lambda
λ为对应的特征值。因为
m
m
m应该与
c
c
c同维度,有理由认为这里的
s
s
s是不做降维的主成分。