机器学习:无监督聚类算法——K均值

本文深入探讨了K均值聚类算法,详细阐述了其迭代过程,即通过随机选取初始聚点,将数据点分配到最近的聚类并更新聚点位置,直至聚点不再变化。算法的目标是最小化聚类内点到聚点的平方距离之和。同时,文章指出了该算法可能陷入局部最优解的问题,并提出通过多次随机初始化来规避。对于K值较小的问题,通常100次随机启动足以找到较优解。

算法过程

假设我们要从散点数据集中找到 K K K个聚类,那么算法第一步就是随机出 K K K个随机点作为每个聚类的聚点。之后,遍历所有数据点,计算这些数据点与 K K K个聚点的距离,将其划分到与其最近的的聚点所在聚类中。划分完成后,我们再移动聚点,把聚点放在它所在聚类的平均点上(如果有个聚点没有任何的数据点归到它这类,那么我们可以直接删除或者再重新随机一个聚点)。划分数据点+移动聚点为一次循环,我们一直执行循环,直到聚点不再移动就表明我们找到了 K K K个聚类。

算法原理

为了表述方便,我们令 c ( i ) c^{(i)} c(i)表示第 i i i个样本 x ( i ) x^{(i)} x(i)被划分到的聚类索引, μ k \mu_k μk表示第 k k k个聚类的聚点,那么K均值算法的目的其实是最小化代价函数
J ( c ( 1 ) , ⋯   , c ( m ) , μ 1 , ⋯   , μ K ) = 1 m ∑ i = 1 m ∣ ∣ x ( i ) − μ c ( i ) ∣ ∣ 2 J(c^{(1)},\cdots,c^{(m)},\mu_1,\cdots,\mu_K)=\frac{1}{m}\sum_{i=1}^m||x^{(i)}-\mu_{c^{(i)}}||^2 J(c(1),,c(m),μ1,,μK)=m1i=1mx(i)μc(i)2
即让每个点到自己所在聚类聚点的距离平方之和最小。这不难理解,在算法过程中,第一步划分过程就是让每个点选择离自己最近的聚点,而第二部则是调整聚点使其与聚类里的其他点的距离平方之和最小。两步交错循环进行就是不断寻找最低点的过程。

规避局部最优解

如果初始聚点设置的不好,很可能会陷入局部最优解。一种推荐的初始化聚点的方法是在样本点中随机挑选 K K K个作为初始聚点。但有时候,算还是会落入局部最优解,比如下图下方两种情况,两个聚类被合并成了一个大聚类,而剩下的一个聚类又被切分成两个小聚类。
在这里插入图片描述
为了规避这样的局部最优解,我们可能需要多次随机初始化后运行K均值算法,从中选取代价函数值最低的模型。一般而言,对于 K ≤ 10 K\le10 K10的问题,100次随机就可以找到一个较好的解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShadyPi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值