K均值聚类
Posted weilonghu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K均值聚类相关的知识,希望对你有一定的参考价值。
基本思想:通过迭代寻找K个簇的一种划分方法,使得聚类结果对应的代价函数最小。特别地,代价函数可以定义为各个样本距离所属聚类中心的误差平方和
[J(c, mu) = sum limits_{i=1}{M}||x_i - mu_{c_i}||^2?]
具体步骤
数据预处理,如归一化、离群点处理等
随机选取K个簇中心,记为(mu_1^{(0)}, cdots, u_k^{(0)})
定义代价函数:(egin{aligned} J(c, mu) = mathop{min}_{mu}mathop{min}_{c}sum limits_{i=1}{M}||x_i - mu_{c_i}||^2 end{aligned})
令(t = 0, 1, cdots)为迭代步数,直到(J)收敛
对于每一个样本(x_i),将其分配到最近的簇
[egin{aligned} c_i^{t} = mathop{arg min}_k ||x_i - mu_k^{(t)}||^2 end{aligned}?]
对于每一个类簇k,重新计算该类簇的中心
[egin{aligned} mu_k^{t} = mathop{arg min}_{mu} sum limits_{i:c_i^{(t)=k}} ||x_i - mu||^2 end{aligned}]
K均值算法在迭代时,假设当前(J)没有达到最小值,那么首先固定类簇中心,调整每个样例所属类别来使(J)减小。然后固定样例所属类别,调整类簇中心使(J)减少。
优缺点
- 优点:可伸缩、高效,复杂度(O(NKt))
- 缺点:
- 受初始值和离群点影响结果不稳定
- 局部最优解
- 数据簇分布差别特别大的情况(例如数量差距悬殊),需要手动设置K值
- 样本点只能划分到单一类中(可用模糊C均值或高斯混合模型)
算法调优
- 数据归一化和离群点处理:基于欧式距离度量的数据划分方法
- K值的选择:手肘法、Gap Statistic方法
- 核K均值算法:增加数据点线性可分的概率
改进模型
- K-means++算法:初始值选择改进
- 假设已经选择了n个初始簇中心,则在选择第n+1个时,距离当前n个中心越远的点会有更高的概率被选中
- ISODATA算法(迭代自组织数据分析法)
- 当属于某个类别的样本数过少时,把该类别去掉
- 当属于某个类别的样本数过多、分类程度较大时,分裂成两个子类别
- 分裂操作、合并操作
收敛性证明
转换为概率模型,通过EM算法的收敛性得到证明
以上是关于K均值聚类的主要内容,如果未能解决你的问题,请参考以下文章