K-means学习笔记

本文深入解析K-means聚类算法的工作原理,包括算法流程、成本函数、随机初始化技巧及局部最优解应对策略。探讨如何选择合适的聚类数量K,并通过肘部法则进行实操演示。

1 K-mean

1.1 K-mean要做什么

  1. 根据要分成几类随机初始化几个点,称为聚类中心 。 而类别在聚类问题中称为
  2. 将样本根据与1中初始化点的距离远近进行归类
  3. 将代表类别的各聚类中心移到所属他们样本点的均值处
  4. 重复前三个步骤,直到聚类中心不再改变位置,此时我们称K-mean已经聚合

1.2算法过程

###1.2.1 input:

  • K(number of clusters)
  • Training set {x1,x2,x3,x4…xm} 每个向量必须是同一维度

###1.2.2 Output:

  • 随机初始化μ1……μK\mu_1 ……\mu_Kμ1μK

  • for i = 1 to m ci:=mink∣∣xi−μk∣∣2c^i := min^k||x^i- \mu_k||^2ci:=minkxiμk2

  • for k= 1 to K μk:=此簇中所有样本的均值\mu_k:=此簇中所有样本的均值 μk:=

故最后某点xix_ixi所属的簇称为μci\mu_{c^i}μci

###1.2.3 Cost Function:

J(c1,....,cm,μ1….,μK)=1m∑1m∣∣xi−μci∣∣2J(c^1,....,c^m,\mu_1….,\mu_K)=\cfrac{1}{m}\sum_1^m||x^i-\mu_{c^i}||^2J(c1,....,cm,μ1.,μK)=m11mxiμci2 失真代价函数(distortion)

找出minJmin JminJc1−cm和μ1−μKc^1-c^m和\mu_1-\mu_Kc1cmμ1μK .

数学证明可证明2过程中两个for循环实际上就是在选择c和μ来minimize损失函数J数学证明可证明2过程中两个for循环实际上就是在选择c和\mu来minimize 损失函数J2forcμminimizeJ

1.3 Tricks

1.3.1 随机初始化方法

  1. 首先确认K是否小于样本数m,为了下面的选择
  2. 随机地选择K个训练样本
  3. μ1,...,μK\mu_1,...,\mu_Kμ1,...,μK等于2中选到的K个样本。

1.3.2 局部最优的解决办法

​ 由于聚类中心随机初始化的随机性,聚类最终有可能会得到局部最优解,通常的解决方案是随机初始化50-1000次,运行50-1000次K-mean,然后选择Cost Function最小的那一种结果。

​ 这种方法更适用于K取值较小时(如2-10次),当K取值较大时,随机初始化不会有太大的改善效果。这是因为K值较大时,往往没那么容易取到局部最优。

1.3.3 选择聚类数量K

​ 1. 通常我们会使用肘部法则(Elbow method)

​ 我们取K为1,2,3,…并计算其代价函数J,如果得到下图所示的数据,那么K=3就是我们需要的K值了,因为K取3时,J在这里有个明显的转折点,很像人的肘部。

在这里插入图片描述

在实际过程中,得到的数据可能是如下图的曲线,那么Elbow method就不太管用了。

在这里插入图片描述

  1. 实际情况中,应该根据实际需要的情况选择K值。如我们要将一万件T恤衫的尺寸数据聚类,我们想分成xs,s,m,l,xl五个尺码,那么就选择K=5.

1.4 总结

​ K-mean是无监督学习的代表算法,优点有模型简单、参数少、收敛速度也还不错。但缺点是非凸函数容易造成局部最优的问题,K值的选取难以把握。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值