python 机器学习——Kmeans之K值的选取原理

Kmeans之K值的选取

一般而言,没有所谓最好的选择聚类数的方法,通常情况下是需要根据不同的问题,人工进行选择的。选择的时候思考我们运用 K-means 算法聚类的动机是什么,然后选择能最好服务于该目的标聚类数。当人们在讨论选择聚类数目的方法时,有一个可能会谈及的方法叫作“肘部”观察法,下面就来详细介绍这种方法。

(1)原理思路

“肘部”观察法用于粗略预估相对合理的类个数。

思路:因为 K-means 模型最终期望所有数据点到其所属的类簇距离的平方和趋于稳定,所以可以通过观察这个数值随着 K 的走势来找出最佳的类簇数量。理想条件下,这个折线在不断下降并且趋于平缓的过程中会有斜率的拐点,同时也意味着从这个拐点开始对应的 K 值开始,类簇中心的增加不会过于破坏数据聚类的结构。

关于“肘部法则”,我们所需要做的是改变 K 值,也就是聚类类别数目的总数,然后分别运行 Kmeans 聚类方法,然后计算代价函数 J 。

在这里插入图片描述

我们可能会得到一条类似于上图的曲线,好像人的手臂,如果你伸出你的胳膊,那么这就是你的肩关节、肘关节、手,这就是“肘部法则”。这种模式的代价值会迅速下降,从 1 到 2 ,从 2 到 3 之后,会在 3 的时候达到一个肘点。在此之后,代价函数就下降的非常慢,看起来就像使用 3 个聚类来进行聚类是正确的(随着K的增加代价函数总是不会减小的,所以样本自成一类的时候代价函数为0)。应用“肘部法则”的时候,如果得到了一个像上面这样的图,那么这将是一种用来选择聚类个数的合理方法。

(2)K-Means 算法步骤

① 随机初始化 K 个聚类中心( cluster centroid ) μ1,μ2,…,μK

② Cluster Assignment : 对于每个数据点 x(i) ,寻找离它最近的聚类中心,将其归入该类,即:

在这里插入图片描述
其中 c(i) 表示 x(i) 所在的类。

③ Move Centroid : 更新聚类中心 uk 的值为所有属于类 k 的数据点的平均值

④ 重复 ②③ 步直到收敛或者达到最大迭代次数

注意:K-Means 算法的两大缺陷在于:

a. 容易收敛到局部最优解;

b. 需要预先设定簇的数量。

(3)K-Means 算法的优化目标

用 μc(i) 表示第 i 个数据点 x(i) 所在类的中心,则 K-Means 优化的代价函数为:

在这里插入图片描述

希望找到最优参数使得该函数最小化,即:

在这里插入图片描述
① 随机初始化:常用的初始化方法是,从训练数据点中随机选择 K( K < m ) 个数据点,作为初始的聚类中心 μ1,μ2,…,μK 。具体步骤如下:

1、确保 K < m ,也就是确保簇的数量应该小于样本数;

2、随机选择 K 个训练样本;

3、令 K 个簇中心 μ1,…,μK 等于 K 个训练样本。

② 局部最优:算法聚类的性能与初始聚类中心的选择有关,为避免陷入局部最优,应该运行多次( 一般取50 次 )取使得代价函数 J 最小的结果。

在这里插入图片描述

如上图所示,对左图的实际数据做聚类,右上图为收敛至全局最优;右下图为受到随机初始类簇中心点位置影响而最终迭代得到的局部最优,这样便导致无法继续更新聚类中心,使得聚类结果与正确结果有很大出入。

K 均值算法可能陷入局部最优,为了减少这种情况的发生,我们可以基于随机初始化,多次运行 K 均值算法。即进行不同的随机初值设定( 50-1000 次 ),对每一种初值设定的情况分别进行聚类,最后选取代价函数 J(C,U) 最小的作为聚类结果。

K 值选择:Elbow 方法(肘部观察法),绘制 J 随 K 的变化曲线,选择下降速度突然变慢的转折点作为 K 值;对于转折不明显的曲线,可根据 K-Means 算法后续的目标进行选择。

在这里插入图片描述
左图为用 Elbow 方法选择 K 值的情况,右图为用 Elbow 法不适用的情况:因为左图中出现一个突变点,这个点对应的 K 值就是可能的较好的分类数目 K , 如图 K 小于3时,代价函数值有突变,代价函数值下降速度较快,这说明更改 K 值会让整体聚类结果有很大改变,也意味着新的聚类数量有更大的改进空间,这样的 K 值不能反映真实的类簇数量;K>3 时代价函数值下降速度显著放缓,这意味着进一步增加 K 值不再会有利于算法的收敛。像这样 K=3 的点,就是肘点( elbow )。但实际上也有可能出现像右边的图的情况,这时的肘点就没有左图那么明显,于是用 Elbow 法不适用。

当然,我们有时应该根据后续目的( later/downstream purpose )来确定 K 的取值。以根据人的身高和体重划分 T 恤的大小码为例,若我们想将 T 恤大小划分为 S/M/L 这 3 种类型,那么 K 的取值应为 3 ;若想要划分为 XS/S/M/L/XL 这 5 种类型,那么 K 的取值应为 5 。如图所示:

在这里插入图片描述

参考

[1] 吴恩达机器学习课程
[2] 范淼,李超.Python 机器学习及实践[M].清华大学出版社, 北京, 2016.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值