无监督学习 | KMeans与KMeans++原理


相关文章:

机器学习 | 目录

机器学习 | 聚类评估指标

机器学习 | 距离计算

无监督学习 | KMeans之Sklearn实现:电影评分聚类

无监督学习 | 层次聚类 之凝聚聚类原理及Sklearn实现

无监督学习 | DBSCAN 原理及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=1kxCixμi22(1)

其中 μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \mu_i=\frac{1}{|C_i|}\sum_{x\in C_i}x μi=Ci1xCix 是簇 C i C_i Ci 的均值向量。直观来看,式 (1) 在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度 E E E 值越小则簇内样本相似度越高。

1.1.1 最小化成本函数

最小化式 (1) 并不容易,找到它的最优解需考察样本集 D D D 所有可能的簇划分,这是一个 NP 难问题。因此,k均值算法采用了贪心策略,通过迭代优化来近似求解式 (2) 。算法流程如下图所示:

图1 k 均值算法

其中第 1 行对均值向量进行初始化,在第 4-8 行对当前簇划分迭代更新,第 9-16 行对均值向量迭代更新,若迭代更新后均值结果保持不变,则在第 18 行对当前簇划分结果返回。

为避免运行时间过长,通常设置一个最大运行轮数(max_iter)或最小调整幅度阈值(tol),若达到最大轮数或调整幅度小于阈值,则停止运行。

1.1.2 实例

下面对西瓜数据集为例演示 k 均值算法的学习过程。为方便叙述,我们将变好为 i i i 的样本称为 x i x_i xi,这是一个包含“密度”与“含糖率”两个属性值的二维向量。

表1 西瓜数据集

假定聚类簇数(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 C1C2C3 分别求出新的均值向量:

μ 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]

图2 k 均值算法 4 轮迭代后的簇划分

标准 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} xXD(x)2D(x)2(2)

这个值越大,表示被选取作为聚类中心的概率较大;

  • 最后,用轮盘法选出下一个聚类中心;

步骤三:重复步骤二,直到选出 k 个聚类中心。[2]

1.2.1 KMeans++ 初始化实例

假设经过步骤一后 6 号点被选择为第一个初始聚类中心,那在进行步骤二时每个样本的 D ( x ) D(x) D(x) 和被选择为第二个聚类中心的概率 P ( x ) P(x) P(x) 如下表所示:

表2 第二个聚类中心的选择

其中的 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.

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kmeans 聚类算法是一种常用的聚类算法,它的原理是将数据划分为k个簇,每个簇由距离中心最近的数据点组成。算法首先随机选取k个中心点,然后将每个数据点指派到距离它最近的中心点所在的簇。接下来,算法会调整每个簇的中心点,使其成为该簇内所有数据点的平均值。最后,算法会不断地重复这个过程,直到所有簇的中心点不再发生变化为止。 简单来说,Kmeans 聚类算法通过不断地调整簇的中心点并将数据点指派到距离它最近的中心点所在的簇,来逐步将数据划分成若干个簇。 ### 回答2: K-means算法是一种常见的聚类算法,其原理是将数据集划分成预定的K个簇,以使簇内的数据点相似度最高,而不同簇之间的相似度最低。 算法的步骤如下: 1. 随机选择K个数据点作为初始的聚类中心。 2. 对于剩余的每个数据点,根据其与各个聚类中心之间的距离,将其划分到距离最近的簇中。 3. 更新每个簇的聚类中心,即取该簇内所有数据点的均值作为新的聚类中心。 4. 重复步骤2和步骤3,直到簇中心不再发生变化或者达到预定的迭代次数。 K-means算法的核心思想是最小化簇内的均方误差(SSE),即各个数据点到其所属簇中心的距离之和。通过迭代更新簇中心,将数据点划分到距离最近的簇中,不断减小SSE,最终得到较好的聚类结果。 K-means算法的优点是简单、易于实现,并且具有良好的可扩展性。但是该算法对初始聚类中心的选择敏感,可能会收敛到局部最优解。此外,K-means算法对于非球形簇结构效果较差。 在实际应用中,可以通过调整K的取值、多次随机初始化以及使用改进的聚类算法(如K-means++算法)来提升K-means算法的性能。 ### 回答3: K均值(K-means)聚类算法是一种常用的无监督学习方法,其原理如下: 1. 初始化:选择要划分的簇数量k,随机选取k个样本作为初始聚类中心。 2. 聚类分配:将所有样本分配给最近的聚类中心,形成k个簇。 3. 更新聚类中心:计算每个簇中样本的平均值,得到新的聚类中心。 4. 重复步骤2和步骤3,直到聚类中心不再变化或达到预定的迭代次数。 K均值算法的目标是最小化簇内样本之间的平方误差和,该误差也称为簇内离散度度量。具体算法表达为: 1. 初始化聚类中心:随机选择k个样本作为初始的聚类中心。 2. 分配样本:对于每个样本,计算其与每个聚类中心的距离,将其分配给距离最近的聚类中心。 3. 更新聚类中心:对于每个簇,计算该簇中所有样本的平均值,得到新的聚类中心。 4. 重复步骤2和步骤3,直到聚类中心不再变化。 K均值算法最后得到的聚类结果,会使得每个样本与所属簇的聚类中心的距离最小化。由于该算法的原理较为简单和高效,因此在许多领域中被广泛应用,例如数据挖掘、模式识别和图像分析等。但需要注意的是,K均值算法对初始聚类中心的选择敏感,可能会收敛到局部最优解。为了解决这个问题,可以多次运行算法并选择最优结果,或者采用其他改进的聚类算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值