基本思想
- 根据给定的==参数k==,先把n个对象粗略分为k类,
- 然后按照某种最优规则(通常表示为一个准则函数)修改不合理的分类,
- 直到准则函数收敛为止,就得到一个最终的分类。
优点
- 对于球形互斥的簇的聚类效果会比较好;
- 对低维数据集效果较好:同样的数据量,维度越高,数据矩阵越稀疏,当数据维度比较高时,数据矩阵是一个稀疏矩阵,K-means算法稀疏矩阵数据聚类效果不佳;
- 容易陷入局部最优:对于K-means算法来说,初始聚类中心的确定十分重要,因为不同的聚类中心会使算法沿着不同的路径搜索最优聚类结果,不过对于陷入局部最优这个问题可以从初始聚类中心的选择来进行改进。
缺点
- 对离群点特别敏感,因为一个很大的极端值对象会扭曲数据分布,使簇均值严重偏离
- k-medoids为k-means的优化算法。
基本步骤
- 1、选择k个样品作为初始凝聚点,或者将所有样品分成k个初始类,然后将这k个类的重心(均值)作为初始凝聚点。
- 2、对所有的样品逐个归类,将每个样品归入凝聚点离它最近的那个类(通常采用欧式距离),该类的凝聚点更新为这一类目前的均值,直至所有样品都归了类。
- 3、重复步骤2,直至所有样品都不能再分配为止。
注意
- 最终的聚类结果在一定程度上依赖于初始凝聚点或初始分类的选择,故应尽可能采用合理的这种初始选择。==经验表明==,聚类过程中绝大多数重要变化均发生在第一次再分配中。
实现
- k 均值聚类 - MATLAB kmeans - MathWorks 中国
- R:kmeans包
- kmeans(data, centers, nstart)
- data : 数据集名称
- centers: 聚类数量,即选择k的值
- nstart: 初始配置个数。因为不同的初始启动集合可能会导致不同的结果,所以建议使用几种不同的初始配置。k-means算法将找到导致簇内变异最小的初始配置。
- (71条消息) R实现KMeans聚类算法教程_梦想画家的博客-CSDN博客_r语言kmeans聚类
- (71条消息) r语言kmeans聚类(真实案例完整流程)_bigdata老司机的博客-CSDN博客_r语言kmeans
- R语言聚类之—kmeans聚类 - 知乎 (zhihu.com)