聚类方法 (clustering function)
- Abstract
- 聚类是针对给定的样本,依据它们特征的相似度或距离,将其归并到若干个类或簇中
- 聚类的基本概念
-
相似度或距离 (similarity or distance)
- 聚类的对象是观测数据,或样本集合
- 假设有
n
n
n个样本,每个样本由
m
m
m个属性的特征向量组成
- 矩阵
X
X
X表示样本集合
- X = [ x i , j ] m × n = [ x 1 , 1 x 1 , 2 ⋯ x 1 , n x 2 , 1 x 2 , 2 ⋯ x 2 , n ⋮ ⋮ ⋮ ⋮ x m , 1 x m , 2 ⋯ x m , n ] X=[x_{i,j}]_{m\times n}=\left[\begin{matrix}x_{1,1}&x_{1,2}&\cdots&x_{1,n}\\x_{2,1}&x_{2,2}&\cdots&x_{2,n}\\\vdots&\vdots&\vdots&\vdots\\x_{m,1}&x_{m,2}&\cdots&x_{m,n}\end{matrix}\right] X=[xi,j]m×n=⎣⎢⎢⎢⎡x1,1x2,1⋮xm,1x1,2x2,2⋮xm,2⋯⋯⋮⋯x1,nx2,n⋮xm,n⎦⎥⎥⎥⎤
- 矩阵的第
j
j
j列表示第
j
j
j个样本
- j = 1 , 2 , ⋯ , n j=1,2,\cdots,n j=1,2,⋯,n
- 第
i
i
i行表示第
i
i
i个属性
- i = 1 , 2 , ⋯ , m i=1,2,\cdots,m i=1,2,⋯,m
- 矩阵
X
X
X表示样本集合
- 在聚类中,将样本集合看作是向量空间中点的集合,以该空间的距离表示样本之间的相似度
- 向量空间
- 定义
- 域
F
F
F上的向量空间
V
V
V是满足下面合成法则的集合
- (a)加法
- V × V → V V\times V\rightarrow V V×V→V, 记作 v , w → v + w v,w\rightarrow v+w v,w→v+w, 其中 v , w ∈ V v,w\in V v,w∈V
- (b)标量乘法
- F × V → V F\times V\rightarrow V F×V→V, 记作 c , v → c v c,v\rightarrow cv c,v→cv, 其中 c ∈ F , v ∈ V c\in F,v\in V c∈F,v∈V
- (a)加法
- 域
F
F
F上的向量空间
V
V
V是满足下面合成法则的集合
- 这两个合成法则满足下列公理
- 加法使 V V V成为交换群 V + V^+ V+, 并带有恒等元,记作0
- 1 v = v 1v=v 1v=v,对所有 v ∈ V v\in V v∈V成立
- 结合律
- ( a b ) v = a ( b v ) (ab)v=a(bv) (ab)v=a(bv)
- 对所有 a , b ∈ F a,b\in F a,b∈F, v ∈ V v\in V v∈V成立
- 分配律
- ( a + b ) v = a v + b v (a+b)v=av+bv (a+b)v=av+bv
- a ( v + w ) = a v + a w a(v+w)=av+aw a(v+w)=av+aw
- 对所有 a , b ∈ F a,b\in F a,b∈F, v , w ∈ V v,w\in V v,w∈V成立
- 元素在域 F F F中的列向量的加法和标量乘法的定义,这样的列向量空间 F n F^n Fn构成域 F F F上的向量空间
- 定义
- 闵可夫斯基距离(Minkowski distance)
- 定义
- 给定样本集合
X
X
X,
X
X
X是
m
m
m维实数向量空间
R
m
R^m
Rm中点的集合
-
x
i
,
x
j
∈
X
x_i,x_j\in X
xi,xj∈X
- x i = ( x 1 , i , x 2 , i , ⋯ , x m , i ) T x_i=(x_{1,i},x_{2,i},\cdots,x_{m,i})^T xi=(x1,i,x2,i,⋯,xm,i)T
- x j = ( x 1 , j , x 2 , j , ⋯ , x m , j ) T x_j=(x_{1,j},x_{2,j},\cdots,x_{m,j})^T xj=(x1,j,x2,j,⋯,xm,j)T
-
x
i
,
x
j
∈
X
x_i,x_j\in X
xi,xj∈X
- 样本 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_{i,j}=(\sum\limits_{k=1}^m|x_{k,i}-x_{k,j}|^p)^{\frac{1}{p}} di,j=(k=1∑m∣xk,i−xk,j∣p)p1, p ≥ 1 p\geq 1 p≥1
- 给定样本集合
X
X
X,
X
X
X是
m
m
m维实数向量空间
R
m
R^m
Rm中点的集合
- 定义
- 欧氏距离(Euclidean distance)
- 当
p
=
2
p=2
p=2
- d i , j = ( ∑ k = 1 m ∣ x k , i − x k , j ∣ 2 ) 1 2 d_{i,j}=(\sum\limits_{k=1}^m|x_{k,i}-x_{k,j}|^2)^{\frac{1}{2}} di,j=(k=1∑m∣xk,i−xk,j∣2)21
- 当
p
=
2
p=2
p=2
- 曼哈顿距离(Manhattan distance)
- 当
p
=
1
p=1
p=1
- d i , j = ∑ k = 1 m ∣ x k , i − x k , j ∣ d_{i,j}=\sum\limits_{k=1}^m|x_{k,i}-x_{k,j}| di,j=k=1∑m∣xk,i−xk,j∣
- 当
p
=
1
p=1
p=1
- 切比雪夫距离(Chebyshev distance)
- 当
p
=
∞
p=\infty
p=∞
- d i , j = max k ∣ x k , i − x k , j ∣ d_{i,j}=\max\limits_k|x_{k,i}-x_{k,j}| di,j=kmax∣xk,i−xk,j∣
- 取各个坐标数值差的绝对值的最大值
- 当
p
=
∞
p=\infty
p=∞
- 马哈拉诺比斯距离(Mahalanobis distance)
- 马氏距离,考虑各个分量(特征)之间的相关性并与各个分量的尺度无关
- 定义
- 给定一个样本集合 X X X, X = [ x i , j ] m × n X=[x_{i,j}]_{m\times n} X=[xi,j]m×n, 其协方差矩阵记作 S S S
-
d
i
,
j
=
[
(
x
i
−
x
j
)
T
S
−
1
(
x
i
−
x
j
)
]
1
2
d_{i,j}=[(x_i-x_j)^TS^{-1}(x_i-x_j)]^{\frac{1}{2}}
di,j=[(xi−xj)TS−1(xi−xj)]21
- x i = ( x 1 , i , x 2 , i , ⋯ , x m , i ) T x_i=(x_{1,i},x_{2,i},\cdots,x_{m,i})^T xi=(x1,i,x2,i,⋯,xm,i)T
- x j = ( x 1 , j , x 2 , j , ⋯ , x m , j ) T x_j=(x_{1,j},x_{2,j},\cdots,x_{m,j})^T xj=(x1,j,x2,j,⋯,xm,j)T
- 当 S S S为单位矩阵时,既样本数据的各个分量互相独立且各个分量的方差为1时,马氏距离就是欧式距离
- 相关系数(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\limits_{k=1}^m(x_{k,i}-\overline{x}_i)(x_{k,j}-\overline{x}_j)}{[\sum\limits_{k=1}^m(x_{k,i}-\overline{x}_i)^2\sum\limits_{k=1}^m(x_{k,j}-\overline{x}_j)^2]^{\frac{1}{2}}}
ri,j=[k=1∑m(xk,i−xi)2k=1∑m(xk,j−xj)2]21k=1∑m(xk,i−xi)(xk,j−xj)
- x ‾ i = 1 m ∑ k = 1 m x k , i \overline{x}_i=\frac{1}{m}\sum\limits_{k=1}^mx_{k,i} xi=m1k=1∑mxk,i
- x ‾ j = 1 m ∑ k = 1 m x k , j \overline{x}_j=\frac{1}{m}\sum\limits_{k=1}^mx_{k,j} xj=m1k=1∑mxk,j
-
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\limits_{k=1}^m(x_{k,i}-\overline{x}_i)(x_{k,j}-\overline{x}_j)}{[\sum\limits_{k=1}^m(x_{k,i}-\overline{x}_i)^2\sum\limits_{k=1}^m(x_{k,j}-\overline{x}_j)^2]^{\frac{1}{2}}}
ri,j=[k=1∑m(xk,i−xi)2k=1∑m(xk,j−xj)2]21k=1∑m(xk,i−xi)(xk,j−xj)
- 夹角余弦(cosine)
- 夹角余弦越接近于1,表示样本越相似;越接近于0,表示样本越不相似
- 定义
- 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\limits_{k=1}^mx_{k,i}x_{k,j}}{[\sum\limits_{k=1}^mx_{k,i}^2\sum\limits_{k=1}^mx_{k,j}^2]^\frac{1}{2}} si,j=[k=1∑mxk,i2k=1∑mxk,j2]21k=1∑mxk,ixk,j
- 向量空间
-
类或簇
- 通过聚类得到的类或簇,本质是样本的子集
- 硬聚类(hard clustering)
- 一个聚类方法假定一个样本只能属于一个类,或类的交集为空集
- 软聚类(soft clustering)
- 一个聚类方法假定一个样本可以属于多个类,或类的交集不为空集
- 定义
- 用 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_{i,j} di,j表示样本 x i x_i xi与样本 x j x_j xj之间的距离
- (a)设
T
T
T为给定的正数,若集合
G
G
G中任意两个样本
x
i
,
x
j
x_i,x_j
xi,xj, 有
- d i , j ≤ T d_{i,j}\leq T di,j≤T
- (b)设
T
T
T为给定的正数,若对集合
G
G
G的任意样本
x
i
x_i
xi, 一定存在
G
G
G中的另一个样本
x
j
x_j
xj, 使得
- d i , j ≤ T d_{i,j}\leq T di,j≤T
- (c)设
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\limits_{x_j\in G}d_{i,j}\leq T nG−11xj∈G∑di,j≤T
- (d)设
T
T
T和
V
V
V为给定的两个正数,如果集合
G
G
G中任意两个样本
x
i
,
x
j
x_i,x_j
xi,xj的距离
d
i
,
j
d_{i,j}
di,j, 满足
- 1 n G ( n G − 1 ) ∑ x i ∈ G ∑ x j ∈ G d i , j ≤ T \frac{1}{n_G(n_G-1)}\sum\limits_{x_i\in G}\sum\limits_{x_j\in G}d_{i,j}\leq T nG(nG−1)1xi∈G∑xj∈G∑di,j≤T
- d i , j ≤ V d_{i,j}\leq V di,j≤V
- 类的特征
- (1)类的均值
x
‾
G
\overline{x}_G
xG, 又称为类的中心
- x ‾ G = 1 n G ∑ i = 1 n G x i \overline{x}_G=\frac{1}{n_G}\sum\limits_{i=1}^{n_G}x_i xG=nG1i=1∑nGxi
- (2)类的直径(diameter)
D
G
D_G
DG
- 类的直径 D G D_G DG是类中任意两个样本之间的最大距离
- D G = max x i , x j ∈ G d i , j D_G=\max\limits_{x_i,x_j\in G}d_{i,j} DG=xi,xj∈Gmaxdi,j
- (3)类的样本散布矩阵(scatter matrix)
A
G
A_G
AG与样本协方差矩阵(covariance matrix)
S
G
S_G
SG
- A G = ∑ i = 1 n G ( x i − x ‾ G ) ( x i − x ‾ G ) T A_G=\sum\limits_{i=1}^{n_G}(x_i-\overline{x}_G)(x_i-\overline{x}_G)^T AG=i=1∑nG(xi−xG)(xi−xG)T
- S G = 1 m − 1 A G = 1 m − 1 ∑ i = 1 n G ( x i − x ‾ G ) ( x i − x ‾ G ) T S_G=\frac{1}{m-1}A_G=\frac{1}{m-1}\sum\limits_{i=1}^{n_G}(x_i-\overline{x}_G)(x_i-\overline{x}_G)^T SG=m−11AG=m−11i=1∑nG(xi−xG)(xi−xG)T
- (1)类的均值
x
‾
G
\overline{x}_G
xG, 又称为类的中心
- 类与类之间的距离
- 类 G p G_p Gp与类 G q G_q Gq之间的距离 D ( p , q ) D(p,q) D(p,q), 也称为连接(linkage)
- 定义
- 类 G p G_p Gp包含 n p n_p np个样本
- 类 G q G_q Gq包含 n q n_q nq个样本
- 用 x ‾ p \overline{x}_p xp表示 G p G_p Gp的均值,即类的中心
- 用 x ‾ q \overline{x}_q xq表示 G q G_q Gq的均值,即类的中心
- (a)最短距离或单连接(single linkage)
- 定义类 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_{i,j}|x_i\in G_p,x_j\in G_q\} Dpq=min{di,j∣xi∈Gp,xj∈Gq}
- (b)最长距离或完全连接(complete linkage)
- 定义类 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_{i,j}|x_i\in G_p,x_j\in G_q\} Dpq=max{di,j∣xi∈Gp,xj∈Gq}
- (c)中心距离
- 定义类 G p G_p Gp与类 G q G_q Gq的中心 x ‾ p \overline{x}_p xp与 x ‾ q \overline{x}_q xq之间的距离为两类之间的距离
- D p q = d x ‾ p , x ‾ q D_{pq}=d_{\overline{x}_p,\overline{x}_q} Dpq=dxp,xq
- (d)平均距离
- 定义类 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\limits_{x_i\in G_p}\sum\limits_{x_j\in G_q}d_{i,j} Dpq=npnq1xi∈Gp∑xj∈Gq∑di,j
-
层次聚类
- 简介
- 层次聚类假设类别之间存在层次结构,将样本聚到层次化的类中
- 层次聚类又有聚合(agglomerative)(自下而上bottom-up)聚类, 分列(divisive)(自上而下top-down)聚类两种方法
- 层次聚类属于hard clustering
- 策略
- agglomerative clustering
- 聚合聚类开始将每个样本各自分到一个类
- 之后将相距最近的两类合并,建立一个新的类
- 重复此操作直到满足停止条件,得到层次化的类别
- divisive clustering
- 分裂聚类开始将所有样本分到一个类
- 之后将已有类中相距最远的样本分到两个新的类
- 重复此操作直到满足停止条件,得到层次化的类别
- agglomerative clustering
- 聚合聚类算法 (agglomerative clustering algorithm)
- (1)计算 n n n个样本两两之间的欧式距离 { d i , j } \{d_{i,j}\} {di,j}, 记作矩阵 D = [ d i , j ] n × n D=[d_{i,j}]_{n\times n} D=[di,j]n×n
- (2)构造 n n n个类,每个类只包含一个样本
- (3)合并类间距离最小的两个类,其中最短距离为类间距离,构建一个新类
- (4)计算新类与当前各类的距离,若类的个数为1,终止计算,否则回到(3)步
- 聚合层次聚类算法的复杂度是
O
(
n
3
m
)
O(n^3m)
O(n3m)
- n n n是样本的个数
- m m m是样本的维数
- Examples
- 给定5个样本的集合,样本之间的欧式距离由如下矩阵
D
D
D表示
- D = [ d i , j ] 5 × 5 = [ 0 7 2 9 3 7 0 5 4 6 2 5 0 8 1 9 4 8 0 5 3 6 1 5 0 ] D=[d_{i,j}]_{5\times 5}=\left[\begin{matrix}0&7&2&9&3\\7&0&5&4&6\\2&5&0&8&1\\9&4&8&0&5\\3&6&1&5&0\end{matrix}\right] D=[di,j]5×5=⎣⎢⎢⎢⎢⎡0729370546250819480536150⎦⎥⎥⎥⎥⎤
- d i , j d_{i,j} di,j表示第 i i i个样本与第 j j j个样本之间的欧式距离
- (1)用5个样本构建5个类
- G i = { x i } G_i=\{x_i\} Gi={xi}, i = 1 , 2 , 3 , 4 , 5 i=1,2,3,4,5 i=1,2,3,4,5
- 样本之间的距离变为类之间的距离,5个类之间的距离矩阵亦为 D D D
- (2)由矩阵
D
D
D可以看出,
D
3
,
5
=
D
5
,
3
=
1
D_{3,5}=D_{5,3}=1
D3,5=D5,3=1为最小
- 0 7 7 2 0 2 9 5 5 9 3 4 0 4 3 6 8 8 6 1 0 1 5 5 0 \begin{matrix}&&&&0&&&&\\&&&7&&7&&&\\&&2&&0&&2&&\\&9&&5&&5&&9&\\3&&4&&0&&4&&3\\&6&&8&&8&&6&\\&&1&&0&&1&&\\&&&5&&5&&&\\&&&&0&&&&\\\end{matrix} 3962417585000007585241963
- 把
G
3
G_3
G3和
G
5
G_5
G5合并为一个新类
- G 6 = { x 3 , x 5 } G_6=\{x_3,x_5\} G6={x3,x5}
- (3)计算
G
6
G_6
G6与
G
1
,
G
2
,
G
4
G_1,G_2,G_4
G1,G2,G4之间的最短距离
- D 6 , 1 = 2 D_{6,1}=2 D6,1=2
- D 6 , 2 = 5 D_{6,2}=5 D6,2=5
- D 6 , 4 = 5 D_{6,4}=5 D6,4=5
- 其余两类之间的距离是
- D 1 , 2 = 7 D_{1,2}=7 D1,2=7
- D 1 , 4 = 9 D_{1,4}=9 D1,4=9
- D 2 , 4 = 4 D_{2,4}=4 D2,4=4
-
D
6
,
1
=
2
D_{6,1}=2
D6,1=2最小,所以将
G
1
G_1
G1与
G
6
G_6
G6合并成一个新类
- G 7 = { x 1 , x 3 , x 5 } G_7=\{x_1,x_3,x_5\} G7={x1,x3,x5}
- (4)计算
G
7
G_7
G7与
G
2
,
G
4
G_2,G_4
G2,G4之间的距离
- D 7 , 2 = 5 D_{7,2}=5 D7,2=5
- D 7 , 4 = 5 D_{7,4}=5 D7,4=5
- D 2 , 4 = 4 D_{2,4}=4 D2,4=4
- 其中
D
2
,
4
=
4
D_{2,4}=4
D2,4=4最小,所以将
G
2
G_2
G2与
G
4
G_4
G4合并成一新类
- G 8 = { x 2 , x 4 } G_8=\{x_2,x_4\} G8={x2,x4}
- (5)将
G
7
G_7
G7与
G
8
G_8
G8合并成一个新类
- G 9 = { x 1 , x 2 , x 3 , x 4 , x 5 } G_9=\{x_1,x_2,x_3,x_4,x_5\} G9={x1,x2,x3,x4,x5}
- 全部样本聚成1类,聚类终止
- 给定5个样本的集合,样本之间的欧式距离由如下矩阵
D
D
D表示
- 简介
-
k k k均值聚类
-
k k k均值聚类是基于样本集合划分的聚类算法
- 将样本集合划分为 k k k个子集,构成 k k k个类
- 将 n n n个样本分到 k k k个类中,每个样本到其所属类的中心距离最小
-
模型
-
n
n
n个样本的集合
- X = { x 1 , x 2 , ⋯ , x n } X=\{x_1,x_2,\cdots,x_n\} X={x1,x2,⋯,xn}
- 每个样本由一个特征向量表示,特征向量的维数是 m m m
-
k
k
k个类
G
1
,
G
2
,
⋯
,
G
k
G_1,G_2,\cdots,G_k
G1,G2,⋯,Gk形成对样本集合
X
X
X的划分
- G i ∩ G j = ∅ G_i\cap G_j=\varnothing Gi∩Gj=∅
- ⋃ i = 1 k G i = X \bigcup\limits_{i=1}^kG_i=X i=1⋃kGi=X
- 用
C
C
C表示划分,一个划分对应着一个聚类结果
- 划分 C C C是一个多对一的函数
- 如果把每个样本用一个整数表示
- i ∈ { 1 , 2 , ⋯ , n } i\in\{1,2,\cdots,n\} i∈{1,2,⋯,n}
- 每个类也用一个整数表示
- l ∈ { 1 , 2 , ⋯ , k } l\in \{1,2,\cdots,k\} l∈{1,2,⋯,k}
- 划分或者聚类可以用函数
- l = C ( i ) l=C(i) l=C(i)
- k k k均值聚类的模型是一个从样本到类的函数
-
n
n
n个样本的集合
-
策略
- k k k均值聚类归结为样本集合 X X X的划分,或者从样本到类的函数的选择问题
- k k k均值聚类的策略是通过损失函数的最小化选取最优的划分或函数 C ∗ C^* C∗
- (1)采用欧氏距离平方(squared Euclidean distance)作为样本之间的距离
d
(
x
i
,
x
j
)
d(x_i,x_j)
d(xi,xj)
-
d
(
x
i
,
x
j
)
=
∑
k
=
1
m
(
x
k
,
i
−
x
k
,
j
)
2
d(x_i,x_j)=\sum\limits_{k=1}^m(x_{k,i}-x_{k,j})^2
d(xi,xj)=k=1∑m(xk,i−xk,j)2
- = ∣ ∣ x i − x j ∣ ∣ 2 =||x_i-x_j||^2 =∣∣xi−xj∣∣2
-
d
(
x
i
,
x
j
)
=
∑
k
=
1
m
(
x
k
,
i
−
x
k
,
j
)
2
d(x_i,x_j)=\sum\limits_{k=1}^m(x_{k,i}-x_{k,j})^2
d(xi,xj)=k=1∑m(xk,i−xk,j)2
- (2)定义样本与其所属类的中心之间的距离的总和为损失函数
- W ( C ) = ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − x ‾ l ∣ ∣ 2 W(C)=\sum\limits_{l=1}^k\sum\limits_{C(i)=l}||x_i-\overline{x}_l||^2 W(C)=l=1∑kC(i)=l∑∣∣xi−xl∣∣2
- x ‾ l = ( x ‾ 1 , l , x ‾ 2 , l , ⋯ , x ‾ m , l ) \overline{x}_l=(\overline{x}_{1,l},\overline{x}_{2,l},\cdots,\overline{x}_{m,l}) xl=(x1,l,x2,l,⋯,xm,l)是第 l l l个类的均值或中心
-
n
l
=
∑
i
=
1
n
I
(
C
(
i
)
=
l
)
nl=\sum\limits_{i=1}^nI(C(i)=l)
nl=i=1∑nI(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
∗
=
a
r
g
min
C
W
(
C
)
C^*=arg\min\limits_CW(C)
C∗=argCminW(C)
- = a r g min C ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − x ‾ l ∣ ∣ 2 =arg\min\limits_C\sum\limits_{l=1}^k\sum\limits_{C(i)=l}||x_i-\overline{x}_l||^2 =argCminl=1∑kC(i)=l∑∣∣xi−xl∣∣2
- 相似的样本被聚到同类时,损失函数值最小,这个目标函数的最优化能达到聚类的目的
-
C
∗
=
a
r
g
min
C
W
(
C
)
C^*=arg\min\limits_CW(C)
C∗=argCminW(C)
-
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\limits_{l=1}^k(-1)^{k-l}{k\choose{l}}k^n S(n,k)=k!1l=1∑k(−1)k−l(lk)kn, 指数级别
- k k k均值聚类的最优解求解问题是NP困难问题
- 二项系数
- 符号
(
n
k
)
{n\choose{k}}
(kn)表示
n
n
n集合中
k
k
k组合的数目,读作"
n
n
n选
k
k
k"
- ( n k ) = n ! k ! ( n − k ) ! {n\choose{k}}=\frac{n!}{k!(n-k)!} (kn)=k!(n−k)!n!
- 此公式对
k
k
k与
n
−
k
n-k
n−k是对称的
- ( n k ) = ( n n − k ) {n\choose{k}}={n\choose{n-k}} (kn)=(n−kn)
- 这些数出现在二项展开式中,所以称其为二项式系数
- ( x + y ) n = ∑ k = 0 n ( n k ) x k y n − k (x+y)^n=\sum\limits_{k=0}^n{n\choose{k}}x^ky^{n-k} (x+y)n=k=0∑n(kn)xkyn−k
- 二项展开式的一个特例
- 当
x
=
y
=
1
x=y=1
x=y=1时
- 2 n = ∑ k = 0 n ( n k ) 2^n=\sum\limits_{k=0}^n{n\choose{k}} 2n=k=0∑n(kn)
- 此公式对应于利用二进制
n
n
n串中所含1的个数来计数
2
n
2^n
2n个这类串的过程
- 因为从 n n n个位置中选择 k k k个放置1的方法数是 ( n k ) {n\choose{k}} (kn)
- 所以有 ( n k ) {n\choose{k}} (kn)个二进制 n n n串恰好含 k k k个1
- 当
x
=
y
=
1
x=y=1
x=y=1时
- 符号
(
n
k
)
{n\choose{k}}
(kn)表示
n
n
n集合中
k
k
k组合的数目,读作"
n
n
n选
k
k
k"
-
算法
-
k
k
k均值聚类的算法是一个迭代过程,每次迭代包括两个步骤
- (1)选择
k
k
k个类的中心,将样本逐个指派到与其最近的中心的类中,得到一个聚类结果
- 对给定的中心值
(
m
1
,
m
2
,
⋯
,
m
k
)
(m_1,m_2,\cdots,m_k)
(m1,m2,⋯,mk), 求一个划分
C
C
C, 使得目标函数极小化
- 在类中心确定的情况下,将每个样本分到一个类中,使样本和其所属类的中心之间的距离总和最小
- 求解结果,将每个样本指派到与其最近的中心 m l m_l ml的类 G l G_l Gl中
- min C ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − m l ∣ ∣ 2 \min\limits_C\sum\limits_{l=1}^k\sum\limits_{C(i)=l}||x_i-m_l||^2 Cminl=1∑kC(i)=l∑∣∣xi−ml∣∣2
- 对给定的中心值
(
m
1
,
m
2
,
⋯
,
m
k
)
(m_1,m_2,\cdots,m_k)
(m1,m2,⋯,mk), 求一个划分
C
C
C, 使得目标函数极小化
- (2)更新每个类的样本均值,作为类的新中心
- 对给定的划分
C
C
C, 再求各个类的中心
(
m
1
,
m
2
,
⋯
,
m
k
)
(m_1,m_2,\cdots,m_k)
(m1,m2,⋯,mk),使得目标函数极小化
- min m 1 , ⋯ , m k ∑ l = 1 k ∑ C ( i ) = l ∣ ∣ x i − m l ∣ ∣ 2 \min\limits_{m_1,\cdots,m_k}\sum\limits_{l=1}^k\sum\limits_{C(i)=l}||x_i-m_l||^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 m_l=\frac{1}{n_l}\sum\limits_{C(i)=l}x_i ml=nl1C(i)=l∑xi, l = 1 , 2 , ⋯ , k l=1,2,\cdots,k l=1,2,⋯,k
- 对给定的划分
C
C
C, 再求各个类的中心
(
m
1
,
m
2
,
⋯
,
m
k
)
(m_1,m_2,\cdots,m_k)
(m1,m2,⋯,mk),使得目标函数极小化
- 重复(1)(2)直至收敛为止
- 直到划分不再改变,得到聚类结果
- (1)选择
k
k
k个类的中心,将样本逐个指派到与其最近的中心的类中,得到一个聚类结果
-
k
k
k均值聚类算法 (k-means clustering algorithm)
- (a)初始化
- 令 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)},\cdots,m_l^{(0)},\cdots,m_k^{(0)}) m(0)=(m1(0),⋯,ml(0),⋯,mk(0))
- (b)对样本进行聚类
- 对固定的类中心
- m ( t ) = ( m 1 ( t ) , ⋯ , m l ( t ) , ⋯ , m k ( t ) ) m^{(t)}=(m_1^{(t)},\cdots,m_l^{(t)},\cdots,m_k^{(t)}) 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)计算新的类中心
- 对聚类结果
C
(
t
)
C^{(t)}
C(t),计算当前各个类中的样本的均值,作为新的类中心
- m ( t + 1 ) = ( m 1 ( t + 1 ) , ⋯ , m l ( t + 1 ) , ⋯ , m k ( t + 1 ) ) m^{(t+1)}=(m_1^{(t+1)},\cdots,m_l^{(t+1)},\cdots,m_k^{(t+1)}) m(t+1)=(m1(t+1),⋯,ml(t+1),⋯,mk(t+1))
- 对聚类结果
C
(
t
)
C^{(t)}
C(t),计算当前各个类中的样本的均值,作为新的类中心
- (d)如果迭代收敛或符合停止条件
- 输出 C ∗ = C ( t ) C^*=C^{(t)} C∗=C(t)
- 否则
- 令 t = t + 1 t=t+1 t=t+1, 返回第(b)步
- (a)初始化
-
k
k
k均值聚类的算法是一个迭代过程,每次迭代包括两个步骤
-
Example
-
给定含有5个样本的集合
-
X = [ 0 0 1 5 5 2 0 0 0 2 ] X=\left[\begin{matrix}0&0&1&5&5\\2&0&0&0&2\end{matrix}\right] X=[0200105052]
-
将样本聚到2个类中
-
# import import warnings warnings.filterwarnings('ignore') import numpy as np X1=np.array((0,2)).T X2=np.array((0,0)).T X3=np.array((1,0)).T X4=np.array((5,0)).T X5=np.array((5,2)).T
-
-
(a)选择两个样本点作为类的中心
- m 1 ( 0 ) = x 1 = ( 0 , 2 ) T m_1^{(0)}=x_1=(0,2)^T m1(0)=x1=(0,2)T
- m 2 ( 0 ) = x 2 = ( 0 , 0 ) T m_2^{(0)}=x_2=(0,0)^T m2(0)=x2=(0,0)T
-
(b)以 m 1 ( 0 ) , m 2 ( 0 ) m_1^{(0)},m_2^{(0)} m1(0),m2(0)为类 G 1 ( 0 ) , G 2 ( 0 ) G_1^{(0)},G_2^{(0)} G1(0),G2(0)的中心
-
计算
- x 3 = ( 1 , 0 ) T x_3=(1,0)^T x3=(1,0)T
- x 4 = ( 5 , 0 ) T x_4=(5,0)^T x4=(5,0)T
- x 5 = ( 5 , 2 ) T x_5=(5,2)^T x5=(5,2)T
-
与
- m 1 ( 0 ) = x 1 = ( 0 , 2 ) T m_1^{(0)}=x_1=(0,2)^T m1(0)=x1=(0,2)T
- m 2 ( 0 ) = x 2 = ( 0 , 0 ) T m_2^{(0)}=x_2=(0,0)^T m2(0)=x2=(0,0)T
- 的欧氏距离平方
-
def euclidean_distance2(x1,x2): res=[] for i in range(len(x1)): res.append((x1[i]-x2[i])**2) return sum(res)
-
对 x 3 = ( 1 , 0 ) T x_3=(1,0)^T x3=(1,0)T
-
d ( x 3 , m 1 ( 0 ) ) = 5 d(x_3,m_1^{(0)})=5 d(x3,m1(0))=5
-
d ( x 3 , m 2 ( 0 ) ) = 1 d(x_3,m_2^{(0)})=1 d(x3,m2(0))=1
-
将 x 3 x_3 x3分到类 G 2 ( 0 ) G_2^{(0)} G2(0)
-
display(euclidean_distance2(X3,X1)) display(euclidean_distance2(X3,X2))
-
-
对 x 4 = ( 5 , 0 ) T x_4=(5,0)^T x4=(5,0)T
-
d ( x 4 , m 1 ( 0 ) ) = 29 d(x_4,m_1^{(0)})=29 d(x4,m1(0))=29
-
d ( x 4 , m 2 ( 0 ) ) = 25 d(x_4,m_2^{(0)})=25 d(x4,m2(0))=25
-
将 x 4 x_4 x4分到类 G 2 ( 0 ) G_2^{(0)} G2(0)
-
display(euclidean_distance2(X4,X1)) display(euclidean_distance2(X4,X2))
-
-
对 x 5 = ( 5 , 2 ) T x_5=(5,2)^T x5=(5,2)T
-
d ( x 5 , m 1 ( 0 ) ) = 25 d(x_5,m_1^{(0)})=25 d(x5,m1(0))=25
-
d ( x 5 , m 2 ( 0 ) ) = 29 d(x_5,m_2^{(0)})=29 d(x5,m2(0))=29
-
将 x 5 x_5 x5分到类 G 1 ( 0 ) G_1^{(0)} G1(0)
-
display(euclidean_distance2(X5,X1)) display(euclidean_distance2(X5,X2))
-
-
-
(c)得到新类
-
G 1 ( 1 ) = { x 1 , x 5 } G_1^{(1)}=\{x_1,x_5\} G1(1)={x1,x5}
-
G 2 ( 1 ) = { x 2 , x 3 , x 4 } G_2^{(1)}=\{x_2,x_3,x_4\} G2(1)={x2,x3,x4}
-
计算类的中心
-
def class_mean(*args): if len(args)<1: return None temp=[] for i in range(len(args)): temp.append(args[i]) mean=[] count=0 for j in range(len(temp[0])): for v in temp: count+=v[j] mean.append(count) count=0 res=[] for k in range(len(mean)): res.append(mean[k]/len(args)) return res
-
m 1 ( 1 ) = ( 2.5 , 2.0 ) T m_1^{(1)}=(2.5,2.0)^T m1(1)=(2.5,2.0)T
-
tuple(class_mean(X1,X5))
-
-
m 2 ( 1 ) = ( 2 , 0 ) T m_2^{(1)}=(2,0)^T m2(1)=(2,0)T
-
tuple(class_mean(X2,X3,X4))
-
-
-
-
(d)重复步骤(b)和(c)
- 将 x 1 x_1 x1分到类 G 1 ( 1 ) G_1^{(1)} G1(1)
- 将 x 2 x_2 x2分到类 G 2 ( 1 ) G_2^{(1)} G2(1)
- 将 x 3 x_3 x3分到类 G 2 ( 1 ) G_2^{(1)} G2(1)
- 将 x 4 x_4 x4分到类 G 2 ( 1 ) G_2^{(1)} G2(1)
- 将 x 5 x_5 x5分到类 G 1 ( 1 ) G_1^{(1)} G1(1)
- 得到新类
- G 1 ( 2 ) = { x 1 , x 5 } G_1^{(2)}=\{x_1,x_5\} G1(2)={x1,x5}
- G 2 ( 2 ) = { x 2 , x 3 , x 4 } G_2^{(2)}=\{x_2,x_3,x_4\} G2(2)={x2,x3,x4}
- 由于得到新类没有改变,聚类停止
- 得到结果
- C 1 ∗ = { x 1 , x 5 } C_1^*=\{x_1,x_5\} C1∗={x1,x5}
- C 2 ∗ = { x 2 , x 3 , x 4 } C_2^*=\{x_2,x_3,x_4\} C2∗={x2,x3,x4}
- 得到结果
-
-
总结
- 选择不同的初始中心,会得到不同的聚类结果
- 对于初始中心的选择,可以用层次聚类对样本进行聚类,得到 k k k个类时停止,然后从每个类中选取一个与中心距离最近的点
-
k
k
k值得选择,聚类结果的质量可以用类的平均直径来衡量
- 类别变小时,平均直径会增加
- 类别数变大超过某个值以后,平均直径会不表
- 这个值是最优的 k k k值
-
-
查看书籍
- 统计学习方法
- 算法导论