两种常用聚类方法:层次聚类(hierarchical clustering)和 k k k均值聚类(k-means clustring)。层次聚类又有聚合(自下而上)和分裂(自下而上)
聚类基本概念
聚类的核心是相似度(similarity)或距离(distance)。样本间的相似度也可以用相关系数(correlation coefficient)来表示。相关系数的绝对值越接近于1,表示样本越相似;越接近于0,表示样本越不相似。相关系数定义为
r
i
j
=
∑
k
=
1
m
(
x
k
i
−
x
ˉ
i
)
(
x
k
j
−
x
ˉ
j
)
[
∑
k
=
1
m
(
x
k
i
−
x
ˉ
i
)
2
∑
k
=
1
m
(
x
k
j
−
x
ˉ
j
)
2
]
1
2
r _ { i j } = \frac { \sum _ { k = 1 } ^ { m } \left( x _ { k i } - \bar { x } _ { i } \right) \left( x _ { k j } - \bar { x } _ { j } \right) } { \left[ \sum _ { k = 1 } ^ { m } \left( x _ { k i } - \bar { x } _ { i } \right) ^ { 2 } \sum _ { k = 1 } ^ { m } \left( x _ { k j } - \bar { x } _ { j } \right) ^ { 2 } \right] ^ { \frac { 1 } { 2 } } }
rij=[∑k=1m(xki−xˉi)2∑k=1m(xkj−xˉj)2]21∑k=1m(xki−xˉi)(xkj−xˉj)
其中
x
ˉ
i
=
1
m
∑
k
=
1
m
x
k
i
,
x
ˉ
j
=
1
m
∑
k
=
1
m
x
k
j
\bar { x } _ { i } = \frac { 1 } { m } \sum _ { k = 1 } ^ { m } x _ { k i } , \quad \bar { x } _ { j } = \frac { 1 } { m } \sum _ { k = 1 } ^ { m } x _ { k j }
xˉi=m1∑k=1mxki,xˉj=m1∑k=1mxkj
协方差矩阵
Σ
i
j
=
cov
(
X
i
,
X
j
)
=
E
[
(
X
i
−
μ
i
)
(
X
j
−
μ
j
)
]
\Sigma _ { i j } = \operatorname { cov } \left( X _ { i } , X _ { j } \right) = \mathrm { E } \left[ \left( X _ { i } - \mu _ { i } \right) \left( X _ { j } - \mu _ { j } \right) \right]
Σij=cov(Xi,Xj)=E[(Xi−μi)(Xj−μj)]
两者区别在于有没有除以标准差。
如果一个聚类方法假定一个样本只能属于一个类,或类的交集为空集,那么该方法称为硬聚类(hard clustering)方法。否则,如果一个样本可以属于多个类,或类的交际不为空寂,那么该方法称为软聚类(soft clustering)方法。
层次聚类
有聚合(agglomerative)或自下而上(bottom-up)聚类,分裂(divisive)或自上而下(top-down)聚类两种方法,每个样本只属于一个类,所以层次聚类属于硬聚类。
聚合聚类算法:
(1)计算
n
n
n个样本两两之间的欧式距离
d
i
j
{d_{ij}}
dij
(2)构造
n
n
n个类,每个类只包含一个样本
(3)合并类间距最小的两个类
(4)若类的个数为1,终止计算
算法复杂度是
O
(
m
n
3
)
O(mn^3)
O(mn3),m是样本维数。
k k k均值聚类
k
k
k均值聚类将样本集合划分为
k
k
k个子集,构成
k
k
k个类,将
n
n
n个样本分到
k
k
k个类中,每个样本到其所属类的中心的距离最小。每个样本只属于一个类,硬聚类。
k
k
k均值聚类就是求解最优化问题:
C
∗
=
arg
min
C
W
(
C
)
=
arg
min
C
∑
l
=
1
k
∑
C
(
i
)
=
l
∥
x
i
−
x
ˉ
l
∥
2
\begin{aligned} C ^ { * } & = \arg \min _ { C } W ( C ) \\ & = \arg \min _ { C } \sum _ { l = 1 } ^ { k } \sum _ { C ( i ) = l } \left\| x _ { i } - \bar { x } _ { l } \right\| ^ { 2 } \end{aligned}
C∗=argCminW(C)=argCminl=1∑kC(i)=l∑∥xi−xˉl∥2
(1)随机选择
k
k
k个样本点作为初始聚类中心
(2)计算每个样本到类中心的距离,将每个样本指派到与其最近的中心类中
(3)计算新的类中心
(4)如果迭代收敛或符合停止条件,输出
C
∗
C^*
C∗
算法复杂度是
O
(
m
n
k
)
O(mnk)
O(mnk),m是样本维数。
得到的类别是平坦的、非层次化的
算法是迭代算法,不能保证得到全局最优
初始中心的选择会直接影响聚类结果,初始中心的选择可以用层次聚类对样本进行聚类,得到k个类时停止,然后从每个类中选取一个与中心距离最近的点
一般地,类别数变小时,平均直径会增加;类别数变大超过某个值以后,平均直径会不变,这个值就是最优的
k
k
k值