k-means是最常用的聚类算法
k-means算法流程
1)选择k个类为初始中心
2)在第i次迭代中,对任意样本,计算其到各中心的距离,将样本归到距离最短的中心所在的类
3)利用均值等方法更新类的中心值
4)对于聚类中心,经过2)3)迭代后,值保持不变,迭代结束,否则继续迭代。
k-means伪代码
选择k个点作为初始质心 repeat • 计算每个点到质心的距离,将其归到距离最短的质心所在的类,形成k个簇 • 重新计算每个簇的质心 until 簇不发生变化或达到最大迭代次数
k-means聚类算法缺点
1)初始中心点位置随机,不同的初始点有不同的迭代次数
2)需人为确定初始聚类中心
3)聚类中心的个数难以估计,不确定数据集应该划分为多少类
k-means改进
kmeans++算法思想
1)假设分为k类
2)从输入的数据点集合中随机选择一个点作为第一个聚类中心
3)对数据集中的每个点,计算其与聚类中心的距离d
4)选择一个新的数据点作为新的聚类中心,选取原则是d较大的点被选择的概率较大
5)重复3和4直到k个聚类中心被选出来
6)利用k个初始的聚类中心运行标准的k-means算法
简而言之,选择中心点时各中心点的距离尽可能的远。
ISODATA
ISODATA是迭代自组织数据分析法。在k-means中,k需要预先人为地确定,在整个算法过程中无法更改。而当遇到高维度、海量的数据集时,k的大小难以估计。ISODATA针对这个问题进行了改进,算法思想是:当属于某个类别的样本数过少时把这个类别去除;当属于某个类别的样本数过多、分散程度较大时把这个类别分为两个子类别。
kernel k-means
传统K-means采用欧式距离进行样本间的相似度度量,而kernel k-means参照支持向量机中核函数的思想,将所有样本映射到另外一个特征空间中再进行聚类,可以改善聚类效果。