【机器学习】聚类算法——K均值算法(k-means)
一、聚类
1.基于划分的聚类:k-means、k-medoids(每个类别找一个样本来代表)、Clarans
2.基于层次的聚类:(1)自底向上的凝聚方法,比如Agnes
(2)自上而下的分裂方法,比如Diana
3.基于密度的聚类:Obsacn、Optics、Birch(CF-Tree)、Cure
4.基于网格的方法:Sting、WaveCluster
5.基于模型的聚类:EM、SOM、Cobweb
二、k-means算法
流程伪代码:
************************************************************
创建k个点作为起始质心(通常是随机选择)
当任意一个点的簇分配结果发生改变时
对数据集里每个数据点
对每个质心
计算每个质心与数据点之间的距离
将数据点分配到与其最近的簇
对每个簇,计算簇中所有点的均值并将均值作为质心
************************************************************
k-means是使下式最小:
三、性能
优点:
1.容易实现,简单快速
2.对于大数据集,该算法是相对可伸缩且高效率的,复杂度大约是O(nkt),其中n为所有对象数目,k是簇的数目,t是迭代次数(通常k<<n)
3.算法尝试找出使平方误差函数值最小的k个划分,当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好
缺点:
1.容易局部收敛,大规模数据集上收敛较慢
2.k-means只能在簇的平均值被定义的情况下才能使用,且对有些分类属性的数据不适合
3.对初值敏感,不同初值可能有不同聚类结果
4.不适合发现非凸面形状的簇,或者大小差别很大的簇
5.对于噪声和孤立点数据敏感,少量的该类数据能对平均值产生极大影响
四、k-means如何确定k值
如何确定k值、初始聚类中心? -----(详见各种论文,对此讨论很多。。。)
初始聚类中心的选取:
→直方图法:根据样本空间自身特征进行区域划分
→粒子群算法:迭代