第十四章 聚类方法
相似度或距离
-
闵可夫斯基距离
闵可夫斯基距离 越大相似度越小, 距离越小相似度越大。
定义 14.1
给定样本集合 X , X X, X X,X 是 m m m 维实数向量空间 R m \mathbf{R}^m Rm 中点的集合, 其中 x i , x j ∈ X , x i = ( x 1 i , x 2 i , ⋯ , x m i ) T , x j = ( x 1 j , x 2 j , ⋯ , x m j ) T x_i, x_j \in X, x_i=\left(x_{1 i}, x_{2 i}, \cdots, x_{m i}\right)^{\mathrm{T}}, x_j=\left(x_{1 j}, x_{2 j}, \cdots, x_{m j}\right)^{\mathrm{T}} xi,xj∈X,xi=(x1i,x2i,⋯,xmi)T,xj=(x1j,x2j,⋯,xmj)T, 样本 x i x_i xi 与样本 x j x_j xj 的闵可夫斯基距离 ( Minkowski distance) 定义为
d i j = ( ∑ k = 1 m ∣ x k i − x k j ∣ p ) 1 p d_{i j}=\left(\sum_{k=1}^m\left|x_{k i}-x_{k j}\right|^p\right)^{\frac{1}{p}} dij=(k=1∑m∣xki−xkj∣p)p1
这里 p ⩾ 1 p \geqslant 1 p⩾1 。 当 p = 2 p=2 p=2 时称为欧氏距离
(Euclidean distance), 即
d i j = ( ∑ k = 1 m ∣ x k i − x k j ∣ 2 ) 1 2 d_{i j}=\left(\sum_{k=1}^m\left|x_{k i}-x_{k j}\right|^2\right)^{\frac{1}{2}} dij=(k=1∑m∣xki−xkj∣2)21
当 p = 1 p=1 p=1 时称为曼哈顿距离
(Manhattan distance), 即
d i j = ∑ k = 1 m ∣ x k i − x k j ∣ d_{i j}=\sum_{k=1}^m\left|x_{k i}-x_{k j}\right| dij=k=1∑m∣xki−xkj∣
当 p = ∞ p=\infty p=∞ 时称为切比雪夫距离
( Chebyshev distance), 取各个坐标数值差的绝对值 的最大值, 即
d i j = max k ∣ x k i − x k j ∣ d_{i j}=\max _k\left|x_{k i}-x_{k j}\right| dij=kmax∣xki−xkj∣ -
哈拉诺比斯距离
马哈拉诺比斯距离 (Mahalanobis distance), 简称马氏距离, 也是另一种常用的 相似度, 考虑各个分量 (特征) 之间的相关性并与各个分量的尺度无关。马哈拉诺比 斯距离越大相似度越小,距离越小相似度越大。
定义 14.2
给定一个样本集合 X , X = [ x i j ] m × n X, X=\left[x_{i j}\right]_{m \times n} X,X=[xij]m×n, 其协方差矩阵记作 S S S 。样本 x i x_i xi 与样本 x j x_j xj 之间的马哈拉诺比斯距离 d i j d_{i j} dij 定义为
d i j = [ ( x i − x j ) T S − 1 ( x i − x j ) ] 1 2 d_{i j}=\left[\left(x_i-x_j\right)^{\mathrm{T}} S^{-1}\left(x_i-x_j\right)\right]^{\frac{1}{2}} dij=[(xi−xj)TS−1(xi−xj)]21
其中
x i = ( x 1 i , x 2 i , ⋯ , x m i ) T , x j = ( x 1 j , x 2 j , ⋯ , x m j ) T x_i=\left(x_{1 i}, x_{2 i}, \cdots, x_{m i}\right)^{\mathrm{T}}, \quad x_j=\left(x_{1 j}, x_{2 j}, \cdots, x_{m j}\right)^{\mathrm{T}} xi=(x1i,x2i,⋯,xmi)T,xj=(x1j,x2j,⋯,xmj)T
当 S S S 为单位矩阵时, 即样本数据的各个分量互相独立且各个分量的方差为 1 时, 由式 (14.6) 知马氏距离就是欧氏距离, 所以马氏距离是欧氏距离的推广。 -
相关系数
样本之间的相似度也可以用相关系数 (correlation coefficient) 来表示。相关系数 的绝对值越接近于 1 , 表示样本越相似; 越接近于 0 , 表示样本越不相似。
定义 14.3
样本 x i x_i xi 与样本 x j x_j xj 之间的相关系数定义为
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=m1k=1∑mxki,xˉj=m1k=1∑mxkj -
夹角余弦
样本之间的相似度也可以用夹角余弦 (cosine) 来表示。夹角余弦越接近于 1 , 表 示样本越相似; 越接近于 0 , 表示样本越不相似。
定义 14.4
样本 x i x_i xi 与样本 x j x_j xj 之间的夹角余弦定义为
s i j = ∑ k = 1 m x k i x k j [ ∑ k = 1 m x k i 2 ∑ k = 1 m x k j 2 ] 1 2 s_{i j}=\frac{\sum_{k=1}^m x_{k i} x_{k j}}{\left[\sum_{k=1}^m x_{k i}^2 \sum_{k=1}^m x_{k j}^2\right]^{\frac{1}{2}}} sij=[∑k=1mxki2∑k=1mxkj2]21∑k=1mxkixkj
由上述定义看出, 用距离度量相似度时, 距离越小样本越相似; 用相关系数时, 相关系数越大样本越相似。注意不同相似度度量得到的结果并不一定一致。
类与类之间的距离
-
最短距离或单连接 (single linkage)
定义两个类样本之间的最短距离为两类之间的距离 -
最长距离或完全连接 (complete linkage)
定义两个类样本之间的最长距离为两类之间的距离 -
中心距离
定义两个类 的中心 x ˉ p \bar{x}_p xˉp 与 x ˉ q \bar{x}_q xˉq 之间的距离为两类之间的距离 -
平均距离
定义两个类 任意两个样本之间距离的平均值为两类之间的距离
层次聚类
-
层次聚类假设类别之问存在层次结构, 将样本聚到层次化的类中。层次聚类又 有聚合合 (agglomerative) 或自下而上 (bottom-up) 聚类、分裂 (divisive) 或自上而 下 (top-down) 聚类两种方法。因为每个样本只属于一个类, 所以层次聚类属于硬 聚类。
聚合聚类开始将每个样本各自分到一个类; 之后将相距最近的两类合并, 建立一 个新的类, 重复此操作直到满足停止条件; 得到层次化的类别。分裂聚类开始将所有 样本分到一个类; 之后将已有类中相距最远的样本分到两个新的类, 重复此操作直到 满足停止条件; 得到层次化的类别。本书只介绍聚合聚类。
聚合聚类的具体过程如下: 对于给定的样本集合, 开始将每个样本分到一个类; 然后按照一定规则, 例如类间距离最小, 将最满足规则条件的两个类进行合并; 如此 反复进行, 每次减少一个类, 直到满足停止条件, 如所有样本聚为一类。
由此可知, 聚合聚类需要预先确定下面三个要素:- 距离或相似度;
- 合并规则;
- 停止条件。
根据这些要素的不同组合, 就可以构成不同的聚类方法。距离或相似度可以是闵 可夫斯基距离、马哈拉诺比斯距离、相关系数、夹角余弦。合并规则一般是类间距离 最小, 类间距离可以是最短距离、最长距离、中心距离、平均距离。停止条件可以是类 的个数达到阈值 (极端情况类的个数是 1)、类的直径超过阈值。
如果采用欧氏距离为样本之间距离; 类间距离最小为合并规则, 其中最短距离为 类间距离; 类的个数是 1 , 即所有样本聚为一类, 为停止条件, 那么聚合聚类的算法 如下。
算法 14.1
(聚合聚类算法)
输入: n n n 个样本组成的样本集合及样本之间的距离;
输出: 对样本集合的一个层次化聚类。- 计算 n n n 个样本两两之间的欧氏距离 { d i j } \left\{d_{i j}\right\} {dij}, 记作矩阵 D = [ d i j ] n × n D=\left[d_{i j}\right]_{n \times n} D=[dij]n×n 。
- 构造 n n n 个类, 每个类只包含一个样本。
- 合并类间距离最小的两个类, 其中最短距离为类间距离, 构建一个新类。 (4) 计算新类与当前各类的距离。若类的个数为 1 , 终止计算, 否则回到步 (3)。 可以看出聚合层次聚类算法的复杂度是 O ( n 3 m ) O\left(n^3 m\right) O(n3m), 其中 m m m 是样本的维数, n n n 是样 本个数。
K均值聚类
-
k k k 均值聚类归结为样本集合 X X X 的划分, 或者从样本到类的函数的选择问题。 k k k 均 值聚类的策略是通过损失函数的最小化选取最优的划分或函数 C ∗ C^* C∗ 。
首先, 采用欧氏距离平方(squared Euclidean distance)作为样本之间的距离 d ( x i , x j ) d\left(x_i, x_j\right) d(xi,xj)
d ( x i , x j ) = ∑ k = 1 m ( x k i − x k j ) 2 = ∥ x i − x j ∥ 2 \begin{aligned} d\left(x_i, x_j\right) &=\sum_{k=1}^m\left(x_{k i}-x_{k j}\right)^2 \\ &=\left\|x_i-x_j\right\|^2 \end{aligned} d(xi,xj)=k=1∑m(xki−xkj)2=∥xi−xj∥2
然后, 定义样本与其所属类的中心之间的距离的总和为损失函数, 即
W ( C ) = ∑ l = 1 k ∑ C ( i ) = l ∥ x i − x ˉ l ∥ 2 W(C)=\sum_{l=1}^k \sum_{C(i)=l}\left\|x_i-\bar{x}_l\right\|^2 W(C)=l=1∑kC(i)=l∑∥xi−xˉl∥2
式中 x ˉ l = ( x ˉ 1 l , x ˉ 2 l , ⋯ , x ˉ m l ) T \bar{x}_l=\left(\bar{x}_{1 l}, \bar{x}_{2 l}, \cdots, \bar{x}_{m l}\right)^{\mathrm{T}} xˉl=(xˉ1l,xˉ2l,⋯,xˉml)T 是第 l l l 个类的均值或中心, n l = ∑ i = 1 n I ( C ( i ) = l ) n_l=\sum_{i=1}^n I(C(i)=l) nl=∑i=1nI(C(i)=l), I ( C ( i ) = l ) I(C(i)=l) I(C(i)=l) 是指示函数, 取值为 1 或 0 。函数 W ( C ) W(C) W(C) 也称为能量, 表示相同类中的样 本相似的程度。
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
相似的样本被聚到同类时, 损失函数值最小, 这个目标函数的最优化能达到聚类 的目的。但是, 这是一个组合优化问题, n n n 个样本分到 k k k 类,所有可能分法的数目是:
S ( n , k ) = 1 k ! ∑ l = 1 k ( − 1 ) k − l ( k l ) k n S(n, k)=\frac{1}{k !} \sum_{l=1}^k(-1)^{k-l}\left(\begin{array}{c} k \\ l \end{array}\right) k^n S(n,k)=k!1l=1∑k(−1)k−l(kl)kn
这个数字是指数级的。事实上, k k k 均值聚类的最优解求解问题是 NP 困难问题。现实 中采用迭代的方法求解。 -
k k k 均值聚类的算法是一个迭代的过程, 每次迭代包括两个步骤。首先选择 k k k 个类的 中心, 将样本逐个指派到与其最近的中心的类中, 得到一个聚类结果; 然后更新每个类 的样本的均值, 作为类的新的中心; 重复以上步骤, 直到收敛为止。具体过程如下。
首先, 对于给定的中心值 ( m 1 , m 2 , ⋯ , m k ) \left(m_1, m_2, \cdots, m_k\right) (m1,m2,⋯,mk), 求一个划分 C C C, 使得目标函数极小化:
min C ∑ l = 1 k ∑ C ( i ) = l ∥ x i − m l ∥ 2 \min _C \sum_{l=1}^k \sum_{C(i)=l}\left\|x_i-m_l\right\|^2 Cminl=1∑kC(i)=l∑∥xi−ml∥2就是说在类中心确定的情况下, 将每个样本分到一个类中, 使样本和其所属类的中心 之间的距离总和最小。求解结果, 将每个样本指派到与其最近的中心 m l m_l ml 的类 G l G_l Gl 中。
然后, 对给定的划分 C C C, 再求各个类的中心 ( m 1 , m 2 , ⋯ , m k ) \left(m_1, m_2, \cdots, m_k\right) (m1,m2,⋯,mk), 使得目标函数极 小化:
min m 1 , ⋯ , m k ∑ l = 1 k ∑ C ( i ) = l ∥ x i − m l ∥ 2 \min _{m_1, \cdots, m_k} \sum_{l=1}^k \sum_{C(i)=l}\left\|x_i-m_l\right\|^2 m1,⋯,mkminl=1∑kC(i)=l∑∥xi−ml∥2
就是说在划分确定的情况下, 使样本和其所属类的中心之间的距离总和最小。求解结 果, 对于每个包含 n l n_l nl 个样本的类 G l G_l Gl, 更新其均值 m l m_l ml :
m l = 1 n l ∑ C ( i ) = l x i , l = 1 , ⋯ , k m_l=\frac{1}{n_l} \sum_{C(i)=l} x_i, \quad l=1, \cdots, k ml=nl1C(i)=l∑xi,l=1,⋯,k
重复以上两个步骤, 直到划分不再改变, 得到聚类结果。 -
算法 14.2(k 均值聚类算法 $)$
输入: n n n 个样本的集合 X X X;
输出: 样本集合的聚类 C ∙ C^{\bullet} C∙ 。- 初始化。令 t = 0 t=0 t=0, 随机选择 k k k 个样本点作为初始聚类中心 m ( 0 ) = m^{(0)}= m(0)= ( m 1 ( 0 ) , ⋯ , m l ( 0 ) , ⋯ , m k ( 0 ) ) \left(m_1^{(0)}, \cdots, m_l^{(0)}, \cdots, m_k^{(0)}\right) (m1(0),⋯,ml(0),⋯,mk(0)) 。
- 对样本进行聚类。对固定的类中心 m ( t ) = ( m 1 ( t ) , ⋯ , m l ( t ) , ⋯ , m k ( t ) ) m^{(t)}=\left(m_1^{(t)}, \cdots, m_l^{(t)}, \cdots, m_k^{(t)}\right) m(t)=(m1(t),⋯,ml(t),⋯,mk(t)), 其中 m l ( t ) m_l^{(t)} ml(t) 为类 G l G_l Gl 的中心, 计算每个样本到类中心的距离, 将每个样本指派到与其最近的 中心的类中, 构成聚类结果 C ( t ) C^{(t)} C(t) 。
- 计算新的类中心。对聚类结果 C ( t ) C^{(t)} C(t), 计算当前各个类中的样本的均值, 作为新 的类中心 m ( t + 1 ) = ( m 1 ( t + 1 ) , ⋯ , m l ( t + 1 ) , ⋯ , m k ( t + 1 ) ) m^{(t+1)}=\left(m_1^{(t+1)}, \cdots, m_l^{(t+1)}, \cdots, m_k^{(t+1)}\right) m(t+1)=(m1(t+1),⋯,ml(t+1),⋯,mk(t+1)) 。
- 如果迭代收玫或符合停止条件, 输出
C
∗
=
C
(
t
)
C^*=C^{(t)}
C∗=C(t) 。
否则, 令 t = t + 1 t=t+1 t=t+1, 返回步 ( 2 ) (2) (2) 。
k k k 均值聚类算法的复杂度是 O ( m n k ) O(m n k) O(mnk), 其中 m m m 是样本维数, n n n 是样本个数, k k k 是类 别个数。
kmeans算法特性
-
总体特点
k k k 均值聚类有以下特点: 基于划分的聚类方法; 类别数 k k k 事先指定; 以欧氏距离 平方表示样本之间的距离, 以中心或样本的均值表示类别; 以样本和其所属类的中心 之间的距离的总和为最优化的目标函数; 得到的类别是平坦的、非层次化的; 算法是 迭代算法, 不能保证得到全局最优。 -
收敛性
k k k 均值聚类属于启发式方法, 不能保证收玫到全局最优, 初始中心的选择会直接 影响聚类结果。注意, 类中心在聚类的过程中会发生移动, 但是往往不会移动太大, 因 为在每一步, 样本被分到与其最近的中心的类中。 -
初始类的选择
选择不同的初始中心, 会得到不同的聚类结果。针对上面的例 14.2 14.2 14.2, 如果 改变两个类的初始中心, 比如选择 m 1 ( 0 ) = x 1 m_1^{(0)}=x_1 m1(0)=x1 和 m 2 ( 0 ) = x 5 m_2^{(0)}=x_5 m2(0)=x5, 那么 x 2 , x 3 x_2, x_3 x2,x3 会分到 G 1 ( 0 ) , x 4 G_1^{(0)}, x_4 G1(0),x4 会分到 G 2 ( 0 ) G_2^{(0)} G2(0), 形成聚类结果 G 1 ( 1 ) = { x 1 , x 2 , x 3 } , G 2 ( 1 ) = { x 4 , x 5 } G_1^{(1)}=\left\{x_1, x_2, x_3\right\}, G_2^{(1)}=\left\{x_4, x_5\right\} G1(1)={x1,x2,x3},G2(1)={x4,x5} 。中 心是 m 1 ( 1 ) = ( 0.33 , 0.67 ) T , m 2 ( 1 ) = ( 5 , 1 ) T m_1^{(1)}=(0.33,0.67)^{\mathrm{T}}, m_2^{(1)}=(5,1)^{\mathrm{T}} m1(1)=(0.33,0.67)T,m2(1)=(5,1)T 。继续迭代, 聚类结果仍然是 G 1 ( 1 ) = { x 1 , x 2 , x 3 } , G 2 ( 1 ) = { x 4 , x 5 } G_1^{(1)}=\left\{x_1, x_2, x_3\right\}, G_2^{(1)}=\left\{x_4, x_5\right\} G1(1)={x1,x2,x3},G2(1)={x4,x5}。聚类停止
初始中心的选择, 比如可以用层次聚类对样本进行聚类, 得到 k k k 个类时停止。然 后从每个类中选取一个与中心距离最近的点。 -
类别数 k k k 的选择
k k k 均值聚类中的类别数 k k k 值需要预先指定, 而在实际应用中最优的 k k k 值是不知道 的。解决这个问题的一个方法是尝试用不同的 k k k 值聚类, 检验各自得到聚类结果的质 量, 推测最优的 k k k 值。聚类结果的质量可以用类的平均直径来衡量。一般地, 类别数 变小时, 平均直径会增加; 类别数变大超过某个值以后, 平均直径会不变; 而这个值正 是最优的 k k k 值。图 14.3 14.3 14.3 说明类别数与平均直径的关系。实验时, 可以采用二分查找, 快速找到最优的 k k k 值。