相关文章:
无监督学习 | KMeans之Sklearn实现:电影评分聚类
无监督学习 | 层次聚类 之凝聚聚类原理及Sklearn实现
无监督学习 | GMM 高斯混合聚类原理及Sklearn实现
1. 原型聚类
原型聚类
亦称“基于原型的聚类”(prototypr-based clustering)。此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务重及其常用。通常情形下,算法先对原型进行初始化,然后对原型进行迭代更新求解。采用不同的原型表示、不同的求解方式,将产生不同的算法,如 KMeans、LVQ、高斯混合。下面介绍 KMeans 算法,我们将在下一篇文章中介绍高斯混合算法。
“原型”是指样本空间具有代表性的点
1.1 KMeans
给定样本集
D
=
x
1
,
x
2
,
⋯
,
x
m
D={x_1,x_2,\cdots,x_m}
D=x1,x2,⋯,xm,“$k$ 均值
”(k-means)算法针对聚类所得簇划分
C
=
C
1
,
C
2
,
⋯
,
C
k
C={C_1,C_2,\cdots,C_k}
C=C1,C2,⋯,Ck 最小化平方误差(残差平方和
S
E
S_E
SE):
E = ∑ i = 1 k ∑ x ∈ C i ∥ x − μ i ∥ 2 2 (1) E=\sum_{i=1}^k \sum_{x\in C_i}\|x-\mu_i\|_2^2 \tag{1} E=i=1∑kx∈Ci∑∥x−μi∥22(1)
其中
μ
i
=
1
∣
C
i
∣
∑
x
∈
C
i
x
\mu_i=\frac{1}{|C_i|}\sum_{x\in C_i}x
μi=∣Ci∣1∑x∈Cix 是簇
C
i
C_i
Ci 的均值向量。直观来看,式 (1) 在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度
,
E
E
E 值越小则簇内样本相似度越高。
1.1.1 最小化成本函数
最小化式 (1) 并不容易,找到它的最优解需考察样本集
D
D
D 所有可能的簇划分,这是一个 NP 难问题。因此,k均值算法采用了贪心策略
,通过迭代优化来近似求解式 (2) 。算法流程如下图所示:
其中第 1 行对均值向量进行初始化,在第 4-8 行对当前簇划分迭代更新,第 9-16 行对均值向量迭代更新,若迭代更新后均值结果保持不变,则在第 18 行对当前簇划分结果返回。
为避免运行时间过长,通常设置一个
最大运行轮数
(max_iter)或最小调整幅度阈值
(tol),若达到最大轮数或调整幅度小于阈值,则停止运行。
1.1.2 实例
下面对西瓜数据集为例演示 k 均值算法的学习过程。为方便叙述,我们将变好为 i i i 的样本称为 x i x_i xi,这是一个包含“密度”与“含糖率”两个属性值的二维向量。
假定聚类簇数
(n_clusters)
k
=
3
k=3
k=3 ,算法开始时随机选取三个样本
x
6
,
x
12
,
x
27
x_6,x_{12},x_{27}
x6,x12,x27 作为初始均值向量
,即:
μ 1 = ( 0.403 ; 0.237 ) , μ 2 = ( 0.343 ; 0.0999 ) , μ 3 = ( 0.532 ; 0.472 ) \mu_1=(0.403;0.237),\mu_2=(0.343;0.0999),\mu_3=(0.532;0.472) μ1=(0.403;0.237),μ2=(0.343;0.0999),μ3=(0.532;0.472)
考察样本 x 1 = ( 0.697 ; 0.460 ) x_1=(0.697;0.460) x1=(0.697;0.460) ,它与当前均值向量 μ 1 , μ 2 , μ 3 \mu_1,\mu_2,\mu_3 μ1,μ2,μ3 的距离分别为 0.369,0.506,0.166,因此 x 1 x_1 x1 将划入簇 C 3 C_3 C3 中。类似的,对数据集中的所有样本考虑一遍后,可得当前簇划分为:
C 1 = { x 5 , x 6 , x 7 , x 8 , x 9 , x 10 , x 13 , x 14 , x 15 , x 17 , x 18 , x 19 , x 20 , x 23 } ; C 2 = { x 11 , x 12 , x 16 } ; C 3 = { x 1 , x 2 , x 3 , x 4 , x 21 , x 22 , x 24 , x 25 , x 26 , x 27 , x 28 , x 29 , x 30 ; } \begin{aligned} C_1& =\{x_5,x_6,x_7,x_8,x_9,x_{10},x_{13},x_{14},x_{15},x_{17},x_{18},x_{19},x_{20},x_{23}\}; \\ C_2& = \{x_{11},x_{12},x_{16}\};\\ C_3& = \{x_{1},x_{2},x_{3},x_{4},x_{21},x_{22},x_{24},x_{25},x_{26},x_{27},x_{28},x_{29},x_{30};\} \\ \end{aligned} C1C2C3={x5,x6,x7,x8,x9,x10,x13,x14,x15,x17,x18,x19,x20,x23};={x11,x12,x16};={x1,x2,x3,x4,x21,x22,x24,x25,x26,x27,x28,x29,x30;}
于是,可从 C 1 、 C 2 、 C 3 C_1、C_2、C_3 C1、C2、C3 分别求出新的均值向量:
μ 1 ′ = ( 0.473 ; 0.214 ) , μ 2 ′ = ( 0.394 ; 0.066 ) , μ 3 ′ = ( 0.623 ; 0.388 ) \boldsymbol{\mu}_{1}^{\prime}=(0.473 ; 0.214), \boldsymbol{\mu}_{2}^{\prime}=(0.394 ; 0.066), \boldsymbol{\mu}_{3}^{\prime}=(0.623 ; 0.388) μ1′=(0.473;0.214),μ2′=(0.394;0.066),μ3′=(0.623;0.388)
更新当前均值向量后,不断重复上述过程,如下图所示,第五轮迭代产生的结果与第四轮迭代相同,于是算法停止,得到最终的簇划分:[1]
标准 KMeans 的聚类结果受初始均值向量的影响,初始点不同,则聚类结果就有可能不同,因此可以通过多次随机初始化
(n_init)聚类中心最终选取最优结果。
1.2 KMeans++
由于 KMeans 算法的分类结果会收到初始点的选取而有所区别,因此提出了标准 KMeans 的改进 KMeans++。
其改进在于对初始均值向量的选择,其他步骤同标准 KMeans 相同。初始均值向量选取的基本思路是:初始的聚类中心之间的相互距离要尽量远。
初始均值向量选取如下:
步骤一:随机选取一个样本作为第一个聚类中心 c1;
步骤二:
-
计算每个样本与当前已有类聚中心最短距离(即与最近一个聚类中心的距离),用 D(x)表示;
-
接着计算每个样本被选为下一个聚类中心的概率:
D ( x ) 2 ∑ x ∈ X D ( x ) 2 (2) \frac{D(x)^2}{\sum_{x\in X}D(x)^2} \tag{2} ∑x∈XD(x)2D(x)2(2)
这个值越大,表示被选取作为聚类中心的概率较大;
- 最后,用轮盘法选出下一个聚类中心;
步骤三:重复步骤二,直到选出 k 个聚类中心。[2]
1.2.1 KMeans++ 初始化实例
假设经过步骤一后 6 号点被选择为第一个初始聚类中心,那在进行步骤二时每个样本的 D ( x ) D(x) D(x) 和被选择为第二个聚类中心的概率 P ( x ) P(x) P(x) 如下表所示:
其中的 P ( x ) P(x) P(x) 就是每个样本被选择为下一个聚类中心的概率。因此 P ( x ) P(x) P(x) 可以看作 PDF,Sum 可以看作 CDF,是 P ( x ) P(x) P(x) 的累加和,用于轮盘法选择出第二个聚类中心。
轮盘法
方法就是随机产生一个 0~1 之间的随机数,判断随机数属于 Sum 行的哪个区间,那么该区间对应的序号就是被选择出来的第二个聚类中心了。例如 1 号点的区间为
[
0
,
0.2
)
[0,0.2)
[0,0.2) ,2 号点的区间为
[
0.2
,
0.525
)
[0.2,0.525)
[0.2,0.525)。
从表中可以直观的看到第二个初始聚类中心有 90% 的概率落在 1~4 号点。而这 4 个点正好是离第一个聚类中心 6 号点较远的四个点。这也验证了 KMeans++ 的思想:即离当前已有聚类中心较远的点有更大的概率被选为下一个聚类中心。
当 k 值大于 2 时,每个样本会有多个距离,需要取最小的那个距离作为 D ( x ) D(x) D(x)。
重复步骤 2 直到选出 k 个聚类中心,并利用这 k 个初始聚类中心来运行标准 KMeans 算法。[3]
2. 在线可视化 KMeans
这个网站可以通过自己设定初始值方式以及数据分布,来进行迭代过程的可视化,有兴趣的也可以试试看。
参考资料
[1] 周志华. 机器学习[M]. 北京: 清华大学出版社, 2016: 202-205.
[2] 寒杰士.[ML] K-means与K-means++[EB/OL].https://www.cnblogs.com/wang2825/articles/8696830.html, 2018-04-02.
[3] 0过把火0.[ML] K-means++[EB/OL].https://www.jianshu.com/p/680dbffad345, 2018-10-19.