1 K-mean
1.1 K-mean要做什么
- 根据要分成几类随机初始化几个点,称为聚类中心 。 而类别在聚类问题中称为簇
- 将样本根据与1中初始化点的距离远近进行归类
- 将代表类别的各聚类中心移到所属他们样本点的均值处
- 重复前三个步骤,直到聚类中心不再改变位置,此时我们称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:=mink∣∣xi−μk∣∣2
-
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)=m11∑m∣∣xi−μci∣∣2 失真代价函数(distortion)
找出minJmin JminJ 的c1−cm和μ1−μKc^1-c^m和\mu_1-\mu_Kc1−cm和μ1−μK .
数学证明可证明2过程中两个for循环实际上就是在选择c和μ来minimize损失函数J数学证明可证明2过程中两个for循环实际上就是在选择c和\mu来minimize 损失函数J数学证明可证明2过程中两个for循环实际上就是在选择c和μ来minimize损失函数J
1.3 Tricks
1.3.1 随机初始化方法
- 首先确认K是否小于样本数m,为了下面的选择
- 随机地选择K个训练样本
- 令μ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就不太管用了。

- 实际情况中,应该根据实际需要的情况选择K值。如我们要将一万件T恤衫的尺寸数据聚类,我们想分成xs,s,m,l,xl五个尺码,那么就选择K=5.
1.4 总结
K-mean是无监督学习的代表算法,优点有模型简单、参数少、收敛速度也还不错。但缺点是非凸函数容易造成局部最优的问题,K值的选取难以把握。
本文深入解析K-means聚类算法的工作原理,包括算法流程、成本函数、随机初始化技巧及局部最优解应对策略。探讨如何选择合适的聚类数量K,并通过肘部法则进行实操演示。
1120

被折叠的 条评论
为什么被折叠?



