引入
聚类是针对给定样本,依据它们特征的相似度或距离,将其归并到若干个“类”或“簇”的数据分析问题。
样本之间的相似度或距离起着重要的作用。
聚类的目的是通过得到的类或簇来发现数据的特点或对数据进行处理。
本章主要介绍两种最常用的聚类方法:1. 层次聚类;2. k均值聚类。
层次聚类又有聚合(自下而上)和分裂(自上而下)两种方法:
- 聚合法开始将每个样本各自分到一个类;之后将距离最近的两类合并,建立一个新的类,重复此操作直到满足停止条件;得到层次化的类别。
- 分裂法开始将所有样本分到一个类;之后将已有类中相距最远的样本分到两个新的类,重复此操作直到满足停止条件;得到层次化的类别。
k均值聚类是基于中心的聚类方法,通过迭代,将样本分到 k k k个类中,使得每个样本与其所属类的中心或均值最近;得到 k k k个“平坦的”、非层次化的类别,构成对空间的划分。
聚类的基本概念
相似度或距离
聚类的对象是观测数据,或样本集合。假设有 n n n个样本,每个样本由 m m m个属性的特征向量组成。样本集合可以用矩阵 X X X表示: X = [ x i j ] m × n = [ x 11 x 12 . . . x 1 n . . . . . . . . . . . . x m 1 x m 2 . . . x m n ] X=[x_{ij}]_{m\times n}=[\begin{aligned}&x_{11}~&x_{12}~~~~~&...~&x_{1n}\\&...~&...~~~~~~&...~&...\\&x_{m1}~&x_{m2}~~~~~&...~&x_{mn}\end{aligned}] X=[xij]m×n=[x11 ... xm1 x12 ... xm2 ... ... ... x1n...xmn]
聚类的核心概念是相似度或距离。相似度直接影响聚类的结果,所以其选择是聚类的根本问题。
闵可夫斯基距离
定义14.1 给定样本集合
X
X
X,
X
X
X是
m
m
m维实数向量空间
R
m
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=(x_{1i},x_{2i},...,x_{mi})^T,x_j=(x_{1j},x_{2j},...,x_{mj})^T
xi,xj∈X,xi=(x1i,x2i,...,xmi)T,xj=(x1j,x2j,...,xmj)T,样本
x
i
x_i
xi与样本
x
j
x_j
xj的闵可夫斯基距离定义为
d
i
j
=
(
∑
k
=
1
m
∣
x
k
i
−
x
k
j
∣
p
)
1
p
d_{ij}=(\sum_{k=1}^m|x_{ki}-x_{kj}|^p)^{\frac{1}{p}}
dij=(k=1∑m∣xki−xkj∣p)p1
当
p
=
2
p=2
p=2时称为欧式距离,当
p
=
1
p=1
p=1时称为曼哈顿距离,当
p
=
∞
p=∞
p=∞时称为切比雪夫距离,取各个坐标数值差的绝对值的最大值,即
d
i
j
=
max
k
∣
x
k
i
−
x
k
j
∣
d_{ij}=\max_k|x_{k_i}-x_{kj}|
dij=maxk∣xki−xkj∣。
马哈诺比斯距离
简称马氏距离。考虑各个分量(特征)之间的相关性并与各个分量的尺度无关。马哈拉诺比斯距离越大相似度越小。
定义14.2给定一个样本集合 X X X, X = [ x i j ] m × n X=[x_{ij}]_{m\times n} X=[xij]m×n,其协方差矩阵记作 S S S,样本 x i x_i xi与样本 x j x_j xj之间的马哈拉诺比斯距离里 d i j d_{ij} dij定义为 d i j = [ ( x i − x j ) T S − 1 ( x i − x j ) ] 1 2 d_{ij}=[(x_i-x_j)^TS^{-1}(x_i-x_j)]^{\frac{1}{2}} dij=[(xi−xj)TS−1(xi−xj)]21
当S为单位矩阵时,即样本数据各个分量相互独立且各个分量的方差为1时,马氏距离就是欧式距离。
相关系数
样本之间的相似度也可以用相关系数来表示。相关系数的绝对值越接近于1,表示样本越相似。
定义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 j − x ˉ i ) 2 ∑ k = 1 m ( x k j − x ˉ j ) 2 ] 1 2 r_{ij}=\frac{\sum_{k=1}^m(x_{ki}-\bar{x}_i)(x_{kj}-\bar x_j)}{[\sum_{k-1}^m(x_{kj}-\bar x_i)^2\sum_{k=1}^m(x_{kj}-\bar x_j)^2]^\frac{1}{2}} rij=[∑k−1m(xkj−xˉi)2∑k=1m(xkj−xˉj)2]21∑k=1m(xki−xˉi)(xkj−xˉj)
这里,把特征值视为了一个随机变量,其一共有 m m m个取值。
夹角余弦
夹角余弦越接近1,表示样本越相似。
定义14.4样本 x i x_i xi与 x j x_j xj之间的夹角余弦定义为 s i j = x i ⋅ x j [ ∑ k = 1 m x k i 2 ∑ k = 1 m x k j 2 ] 1 2 s_{ij}=\frac{x_i\cdot x_j}{[\sum_{k=1}^mx_{ki}^2\sum_{k=1}^mx_{kj}^2]^{\frac{1}{2}}} sij=[∑k=1mxki2∑k=1mxkj2]21xi⋅xj
类或簇
通过聚类得到的类或簇,本质是样本的子集。
用 G G G表示类或簇,用 x i , x j x_i,x_j xi,xj表示类中的样本,用 n G n_G nG表示 G G G中样本的个数,用 d i j d_{ij} dij表示两个样本之间的距离。
类或簇的定义
定义14.5 设 T T T为给定的正数,若集合 G G G中任意两个样本 x i , x j x_i,x_j xi,xj,有 d i j ≤ T d_{ij}\le T dij≤T则称 G G G为一个类或簇。
定义14.6 设
T
T
T为给定的正数,若对集合
G
G
G的任意样本
x
i
x_i
xi,一定存在
G
G
G中的另一个样本
x
j
x_j
xj使得
d
i
j
≤
T
d_{ij}\le T
dij≤T
称
G
G
G为一个类或簇。
定义14.7 设
T
T
T为给定的正数,若对集合
G
G
G的任意样本
x
i
x_i
xi,
G
G
G中的另一个样本
x
j
x_j
xj满足
1
n
G
−
1
∑
x
j
∈
G
d
i
j
≤
T
\frac{1}{n_G-1}\sum_{x_j\in G}d_{ij}\le T
nG−11xj∈G∑dij≤T
称
G
G
G为一个类或簇,其中
n
G
n_G
nG为G中样本的个数。
定义14.8 设 T T T和 V V V为给定的两个正数,若集合 G G G中任意两个样本 x i , x j x_i,x_j xi,xj的距离满足有 1 n G ( n G − 1 ) ∑ x i ∈ G ∑ x j ∈ G d i j ≤ T , d i j ≤ V \frac{1}{n_G(n_G-1)}\sum_{x_i\in G}\sum_{x_j\in G}d_{ij}\le T,d_{ij}\le V nG(nG−1)1xi∈G∑xj∈G∑dij≤T,dij≤V则称 G G G为一个类或簇。
以上四个定义中,第一个定义最为常用,并由他可推出其余三个定义。
类的特征
- 类的均值 x ˉ G = 1 n G ∑ i = 1 n G x i \bar x_G = \frac{1}{n_G}\sum_{i=1}^{n_G}x_i xˉG=nG1i=1∑nGxi
- 类的直径 D G = max x i , x j ∈ G d i j D_G=\max_{x_i,x_j\in G}d_{ij} DG=xi,xj∈Gmaxdij
- 类的样本散布矩阵 A G = ∑ i = 1 n G ( x i − x ˉ G ) ( x i − x ˉ G ) T A_G=\sum_{i=1}^{n_G}(x_i-\bar x_G)(x_i-\bar x_G)^T AG=i=1∑nG(xi−xˉG)(xi−xˉG)T
- 类的协方差矩阵 S G = 1 n G − 1 A G S_G=\frac{1}{n_G-1}A_G SG=nG−11AG
第三个就是
类与类之间的距离
考虑 G p G_p Gp与 G q G_q Gq之间的距离 D ( p , q ) D(p,q) D(p,q),也称为连接。类与类之间的距离也有多种定理。
- 最短距离或单连接:定义类 G p G_p Gp的样本与 G q G_q Gq的样本之间的最短距离为两类之间的距离 D p q = min { d i j ∣ x i ∈ G p , x j ∈ G q } D_{pq}=\min\{d_{ij}|x_i\in G_p,x_j\in G_q\} Dpq=min{dij∣xi∈Gp,xj∈Gq}
- 最长距离或完全连接:定义类 G p G_p Gp的样本与 G q G_q Gq的样本之间的最长距离为两类之间的距离 D p q = max { d i j ∣ x i ∈ G p , x j ∈ G q } D_{pq}=\max\{d_{ij}|x_i\in G_p,x_j\in G_q\} Dpq=max{dij∣xi∈Gp,xj∈Gq}
- 中心距离:定义类 G p G_p Gp的样本与 G p G_p Gp的中心 x ˉ p \bar x_p xˉp与 x ˉ q \bar x_q xˉq之间的距离 D p q = d x ˉ p x ˉ q D_{pq}=d_{\bar x_p\bar x_q} Dpq=dxˉpxˉq
- 平均距离:定义类 G p G_p Gp与类 G q G_q Gq任意两个样本之间的距离的平均值为两类之间的距离 D p q = 1 n p n q ∑ x i ∈ G p ∑ x j ∈ G q d i j D_{pq}=\frac{1}{n_pn_q}\sum_{x_i\in G_p}\sum_{x_j\in G_q}d_{ij} Dpq=npnq1xi∈Gp∑xj∈Gq∑dij
层次聚类
层次聚类假设类别之间存在层次结构,将样本聚到层次化的类中。因为每个样本只属于一个类,所以层次聚类属于硬聚类。
本节只介绍聚合聚类,其步骤描述如下:
- 对于给定的样本集合,开始将每个样本分到一个类;
- 然后按照一定规则,例如类间间距最小,将满足规则条件的两个类进行合并;
- 如此反复进行,每次减少一个类,直到满足停止条件,如所有样本聚为一类。
聚合聚类需要预先确定下面三个要素:
- 距离或相似度;
- 合并规则;
- 停止条件。
距离或相似度和合并规则的选择在之前已经介绍。停止条件的话,可以选择类的个数达到阈值或者类的直径超过阈值。
算法14.1(聚合聚类算法)
输入:
n
n
n个样本组成的样本集合及样本之间的距离;
输出:对样本集合的一个层次化聚类。
(1)计算
n
n
n个样本两两之间的欧式距离
{
d
i
j
}
\{d_{ij}\}
{dij},记作矩阵
D
=
[
d
i
j
]
n
×
n
D=[d_{ij}]_{n\times n}
D=[dij]n×n(对称的)。
(2)构造
n
n
n个类,每个类只包含一个样本。
(3)合并类间距最小的两个类,其中最短距离为类间距离,构建一个新类。
(4)计算新类与当前各类的距离。若类的个数为1,终止计算,否则返回步骤3.
其复杂度为 O ( n 2 m ) O(n^2m) O(n2m),其中 m m m是样本的维数, n n n是样本个数。
k均值聚类
模型
给定 n n n个样本的集合 X = { x 1 , x 2 , . . . , x n } X=\{x_1,x_2,...,x_n\} X={x1,x2,...,xn},每个样本由一个特征向量表示,特征向量的维数是 m m m。 k k k均值聚类的目标是将 n n n个样本分到 k k k个不同的类或簇中,这里假设 k < n k\lt n k<n。 k k k个类 G 1 , G 2 , . . . , G k G_1,G_2,...,G_k G1,G2,...,Gk形成对样本集合的划分,两两之间并不相交。用 C C C表示划分,一个划分对应一个聚类结果。
划分 C C C是一个多对一的函数。划分或者聚类可以用函数 l = C ( i ) l=C(i) l=C(i)表示。所以 k k k均值聚类的模型是一个从样本到类的函数。
策略
k k k均值聚类归结为样本集合 X X X的划分,或者从样本到类的函数选择问题。 k k k均值聚类的策略是通过损失函数的最小化选取最优划分或函数 C ∗ C^* C∗。
采用欧式距离的平方作为样本之间的距离。定义样本与其所属类的中心之间的距离的总和为损失函数
W
(
C
)
=
∑
l
=
1
k
∑
C
i
=
l
∥
x
i
−
x
ˉ
l
∥
2
W(C)=\sum_{l=1}^k\sum_{C_{i}=l}\|x_i-\bar x_l\|^2
W(C)=l=1∑kCi=l∑∥xi−xˉl∥2
函数
W
(
C
)
W(C)
W(C)也称为能量,表示相同类中的样本相似程度。
k k k均值聚类就是求解最优化问题 C ∗ = arg max C ∑ l = 1 k ∑ C i = l ∥ x i − x ˉ l ∥ 2 C*=\argmax_C \sum_{l=1}^k\sum_{C_i=l}\|x_i-\bar x_l\|^2 C∗=Cargmaxl=1∑kCi=l∑∥xi−xˉl∥2
事实上, k k k均值聚类的最优解问题是NP问题,现实中采用迭代的方法求解。
算法
k k k均值聚类的算法是一个迭代的过程。
算法14.2(k均值聚类算法)
输入:n个样本的集合
X
X
X;
输出:样本集合的聚类
C
∗
C^*
C∗。
(1)初始化,令
t
=
0
t=0
t=0,随机选择
k
k
k个样本点作为初始聚类中心
m
(
0
)
=
{
m
1
(
0
)
,
.
.
.
,
m
l
(
0
)
,
.
.
.
,
m
k
(
0
)
}
m^{(0)}=\{m_1^{(0)},...,m_l^{(0)},...,m_k^{(0)}\}
m(0)={m1(0),...,ml(0),...,mk(0)}
(2)对样本进行聚类,对固定的类中心,计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中,构成聚类结果
C
(
t
)
C^{(t)}
C(t)
(3)计算新的类中心。对聚类结果
C
(
t
)
C^{(t)}
C(t),计算当前各个类中的样本的均值,作为信的类中心。
(4)如果迭代收敛或者符合停止条件,输出
C
∗
=
C
(
t
)
C^*=C^{(t)}
C∗=C(t),否则令
t
=
t
+
1
t=t+1
t=t+1,返回步骤2。
k k k均值的算法的复杂度是 O ( m n k ) O(mnk) O(mnk),n个样本点,要和k个中心的n个特征做计算。
接下来,我们来结合损失函数来理解一下这个算法:
- 首先,对于给定的中心值,按照最近邻的方式分配类别,保证了极小化原则;
- 然后,按照划分求出新的中心值,极小化了目标函数,就是说在给定划分的情况下使样本和所属类的中心之间的距离总和最小。
算法特性
- 总体特点:基于划分;类别数事先给定;欧式距离的平方;中心或样本均值表示类别;欧式距离平方和为损失函数;得到的类别是平坦的、非层次化的;迭代算法,不能保证全局最优。
- 收敛性:启发式方法,不能保证全局最优;初始中心的选择会影响聚类结果;类中心会移动,但变化不大,因为样本被分到了最近的类中。
- 初始类的选择:不同的选择带来不同的结果。
- 类别数 k k k的选择:尝试使用不同的 k k k推测最优 k k k值(常采用二分查找);聚类结果的质量可以通过类的平均直径来度量。一般而言,类别数变小,平均直径增加;类别数变大超过某个值之后,平均直径不发生改变,这正是最优 k k k值。