聚类Clustering
机器学习 聚类Clustering
将无标签的数据进行分类,一个好的聚类应满足:
- 簇内相似度高
- 簇间相似度低
flat or partitional clustering 扁平的聚类:各分类之间相互独立
hierarchical clustering 层次式聚类
K-Means K均值分类
给定一系列的数据点
X
=
{
x
1
,
x
2
,
x
N
}
(
x
i
∈
R
D
)
X = \{ x_1,x_2,x_N\} (x_i \in\mathbb{R}^D)
X={x1,x2,xN}(xi∈RD),把N个数据点分到K个集合
{
C
k
}
k
=
1
,
2
,
.
.
.
,
K
\{C_k\}_{k=1,2,...,K}
{Ck}k=1,2,...,K中,使得簇内欧氏距离二次方之和最小。
arg
min
C
k
∑
i
=
1
k
∑
x
∈
C
k
∥
x
−
u
i
∥
2
\arg\min_{C_k}\sum_{i=1}^k\sum_{x\in C_k}\|x-u_i\|^2
argCkmini=1∑kx∈Ck∑∥x−ui∥2
u
i
u_i
ui是
C
i
C_i
Ci内所有点的均值
K-Means 算法
初始化: 产生随机种子点
在每次迭代过程中:
1、将每个点重新分类到,距离最近的中心点所属的簇中(基于欧氏距离)
C
k
=
{
x
i
∣
∥
x
i
−
u
k
∥
2
≤
∥
x
i
−
u
k
′
∥
2
,
f
o
r
∀
k
′
≠
k
}
C_k = \{ x_i | \|x_i - u_k\|^2 \leq \|x_i-u_{k'}\|^2 ,for \forall k' \neq k \}
Ck={xi∣∥xi−uk∥2≤∥xi−uk′∥2,for∀k′=k}
2、更新每一个簇的均值
u
k
=
m
e
a
n
(
C
k
)
=
1
∣
C
k
∣
∑
x
∈
C
k
x
u_k = mean(C_k) = \frac{1}{|C_k|}\sum_{x\in C_k}x
uk=mean(Ck)=∣Ck∣1x∈Ck∑x
停止迭代:当簇的mean或者loss基本不变时
随机两个种子点
K-Means 的loss function
u
1
,
u
2
,
.
.
.
,
u
k
u_1,u_2,...,u_k
u1,u2,...,uk 是 K个簇的均值
z
i
,
k
z_{i,k}
zi,k是一个指示
z
i
,
k
=
{
1
,
x
i
∈
C
k
0
,
o
r
t
h
e
r
w
i
s
e
z_{i,k} = \left\{\begin{matrix} 1,\quad x_i \in C_k\\ 0, ortherwise \end{matrix}\right.
zi,k={1,xi∈Ck0,ortherwise
z
i
=
[
z
i
,
1
,
z
i
,
2
,
.
.
.
,
z
i
,
k
]
T
z_i = [z_{i,1}, z_{i,2},...,z_{i,k}]^T
zi=[zi,1,zi,2,...,zi,k]T
∑
k
=
1
K
z
i
,
k
=
1
\sum_{k=1}^K z_{i,k} = 1
∑k=1Kzi,k=1,表明一个点智能属于其中的一类。
对xi来说,loss是
l
(
{
u
k
}
k
=
1
,
2
,
.
.
.
,
K
,
x
i
,
z
i
)
=
∑
k
=
1
K
z
i
,
k
∥
x
i
−
u
k
∥
2
l(\{u_k\}_{k=1,2,...,K}, x_i, z_i) = \sum_{k=1}^Kz_{i,k}\|x_i - u_k\|^2
l({uk}k=1,2,...,K,xi,zi)=k=1∑Kzi,k∥xi−uk∥2
将总的所有的点的loss 定义为 K-means 的损失函数
L
(
μ
,
X
,
z
)
=
∑
i
=
1
N
∑
k
=
1
K
z
i
,
k
∥
x
i
−
μ
k
∥
2
=
∥
X
−
Z
μ
∥
2
L(\mu,X,z) = \sum_{i=1}^N\sum_{k=1}^Kz_{i,k}\|x_i - \mu_k\|^2 = \|X-Z\mu\|^2
L(μ,X,z)=i=1∑Nk=1∑Kzi,k∥xi−μk∥2=∥X−Zμ∥2
z
i
T
μ
z_i^T\mu
ziTμ是xi 所属的簇的均值。
- 上式是一个非凸函数,可能会有许多局部最优
- 也是一个NP-Hard问题
- 使用启发式的方法解决
- 固定u,改变Z使得loss更小
- 固定Z,改变u使得loss更小
因为有局部最优不同算法可能收敛到不同的局部最优
K-mean 的收敛
在每一步更新u,Z时,目标不会增大
update Z from
Z
(
t
−
1
)
Z^{(t-1)}
Z(t−1) to
Z
(
t
)
Z^{(t)}
Z(t)
L
(
μ
(
t
−
1
)
,
Z
,
Z
(
t
)
)
≤
L
(
μ
(
t
−
1
)
,
X
,
Z
(
t
−
1
)
)
L(\mu^{(t-1)},Z,Z^{(t)}) \leq L(\mu^{(t-1)},X,Z^{(t-1)})
L(μ(t−1),Z,Z(t))≤L(μ(t−1),X,Z(t−1))
因为
Z
(
t
)
=
arg
min
Z
L
(
μ
(
t
−
1
)
,
X
,
Z
)
Z^{(t)} = \arg\min_Z L(\mu^{(t-1)},X,Z)
Z(t)=argminZL(μ(t−1),X,Z)
update
μ
\mu
μ from
μ
(
t
−
1
)
\mu^{(t-1)}
μ(t−1) to
μ
(
t
)
\mu^{(t)}
μ(t)
L
(
μ
(
t
)
,
Z
,
Z
(
t
−
1
)
)
≤
L
(
μ
(
t
−
1
)
,
X
,
Z
(
t
−
1
)
)
L(\mu^{(t)},Z,Z^{(t-1)}) \leq L(\mu^{(t-1)},X,Z^{(t-1)})
L(μ(t),Z,Z(t−1))≤L(μ(t−1),X,Z(t−1))
因为
μ
(
t
)
=
arg
min
μ
L
(
μ
,
X
,
Z
(
t
−
1
)
)
\mu^{(t)} = \arg\min_{\mu} L(\mu,X,Z^{(t-1)})
μ(t)=argminμL(μ,X,Z(t−1))
K-means 一些限制
- 硬分类 hard assignment,一个点要么属于一类,要么完全不属于。
- 更适合每个簇的大小差不多的情况
- 当分类的簇是个圆形的表现好,当簇不是圆形的,是个非凸的表现不好。
- kernel K-means可以解决非凸的情况。
kernel K-means
基本思想: 将K-means 里的欧式举例替换成 kernel的形式。
d
(
x
i
,
μ
k
)
=
∥
ϕ
(
x
i
)
−
ϕ
(
μ
k
)
∥
d(x_i,\mu_k) = \|\phi( x_i) - \phi(\mu_k) \|
d(xi,μk)=∥ϕ(xi)−ϕ(μk)∥
∥
ϕ
(
x
i
)
−
ϕ
(
μ
k
)
∥
2
=
∥
ϕ
(
x
i
)
∥
2
+
∥
ϕ
(
μ
k
)
∥
2
−
2
ϕ
(
x
i
)
T
ϕ
(
μ
k
)
\| \phi( x_i) - \phi(\mu_k) \|^2 = \|\phi( x_i)\|^2 + \|\phi( \mu_k)\|^2 - 2\phi(x_i)^T\phi(\mu_k)
∥ϕ(xi)−ϕ(μk)∥2=∥ϕ(xi)∥2+∥ϕ(μk)∥2−2ϕ(xi)Tϕ(μk)
d
(
x
i
,
μ
k
)
2
=
k
(
x
i
,
k
i
)
+
k
(
μ
k
,
μ
k
)
−
2
k
(
x
i
,
μ
k
)
d(x_i,\mu_k)^2 = k(x_i,k_i) + k(\mu_k,\mu_k) - 2k(x_i,\mu_k)
d(xi,μk)2=k(xi,ki)+k(μk,μk)−2k(xi,μk)
层次聚类 Hierarchical Clustering
度量两个数据点间的距离的方法
给定数据点 a = ( a 1 , a 2 , . . , a n ) , b = ( b 1 , b 2 , . . . , b n ) a = (a_1,a_2,..,a_n), b = (b_1,b_2,...,b_n) a=(a1,a2,..,an),b=(b1,b2,...,bn)
- 欧氏距离: ∥ a − b ∥ 2 = ∑ i ( a i − b i ) 2 \|a-b\|_2 =\sqrt{\sum_i(a_i-b_i)^2} ∥a−b∥2=∑i(ai−bi)2
- 欧式距离平方: ∥ a − b ∥ 2 … … 2 = ∑ i ( a i − b i ) 2 \|a-b\|_2……2 =\sum_i(a_i-b_i)^2 ∥a−b∥2……2=∑i(ai−bi)2
- 曼哈顿距离: ∥ a − b ∥ 1 = ∑ i ∣ a i − b i ∣ \|a-b\|_1 = \sum_i|a_i-b_i| ∥a−b∥1=∑i∣ai−bi∣
- 最大距离: ∥ a − b ∥ ∞ = max i ∣ a i − b i ∣ \|a-b\|_\infty = \max_i|a_i-b_i| ∥a−b∥∞=maxi∣ai−bi∣
- 马氏距离: ( a − b ) T S − 1 ( a − b ) \sqrt{(a-b)^TS^{-1}(a-b)} (a−b)TS−1(a−b)
如何度量两个集合之间的距离
min-link:会导致cluster非常大
d
(
R
,
S
)
=
min
x
R
∈
R
,
x
S
∈
S
d
(
x
R
,
x
S
)
d(R,S) = \min_{x_R\in R,x_S\in S} d(x_R,x_S)
d(R,S)=xR∈R,xS∈Smind(xR,xS)
max-link: 会使得 cluster 小,并且呈圆形
d
(
R
,
S
)
=
max
x
R
∈
R
,
x
S
∈
S
d
(
x
R
,
x
S
)
d(R,S) = \max_{x_R\in R,x_S\in S} d(x_R,x_S)
d(R,S)=xR∈R,xS∈Smaxd(xR,xS)
average-link
d
(
R
,
S
)
=
1
∣
R
∣
∣
S
∣
max
x
R
∈
R
,
x
S
∈
S
d
(
x
R
,
x
S
)
d(R,S) = \frac{1}{|R||S|}\max_{x_R\in R,x_S\in S} d(x_R,x_S)
d(R,S)=∣R∣∣S∣1xR∈R,xS∈Smaxd(xR,xS)
Flat vs Hierarchical Clustering
- flat clustering 产生单个的分割
- 层次clustering 在不同层次产生不同分割
- flat clustering 需要制定簇的数量
- 层次聚类不需要指定簇的数量
- flat 聚类更高效
- 没有明确的理由说明这两个哪个好那个坏。