目录
- 历史渊源
- 算法原理
- 优缺点
- 改进算法
- K-Modes
- K-Medoids
- Mini-Batch K-Means
- 二分K-Means
- 相关算法
K-Means算法的功能是将空间中m个点按相似性划分为k个不同部分,每个部分都有一个中心点。举个例子来说,这里有6本书,书名是:疯狂的投资、深夜加油站遇见苏格拉底、与神对话、巴菲特之道、理念的力量、股票作手回忆录。那么按相似性可以把疯狂的投资、巴菲特之道以及股票作手回忆录划分到同一个类别当中,因为它们都是关于股票投资的;而另外三本书可以划分到另一个类别;类别的中心点那你就可以认为是最能代表这个类别中的某一本书。(*** 这个例子举得不是很恰当啊。***)
1. 历史渊源
K-Means算法来源于信号处理中的矢量量化技术。所谓的矢量量化指的是:将一个向量空间中的点用其子集代替。而子集的寻找就可以使用K-Means算法。
2. 算法原理
K-Means算法伪码如下:
- 随机产生k个中心点,一个中心点代表一个类别
- 计算每个点与k个中心点的欧式距离,并将该点划分到与之距离最短的中心点所属的类别当中
- 对每一个类别,使用该类中所有点的均值更新中心点
- 重复2/3两个步骤直到前后两次划分的类别不再改变为止
3. 优缺点
优点:
- 简单
- 复杂度较低,为O(tmk),其中t为迭代次数,m为数据集大小,k为中心点个数。
缺点:
- 由于使用均值更新中心点,因此对数据集中的极值较为敏感。
- 预先需要给定k的值,在用户不能明确k值得情况下只能猜测了。
- 在数据分布存在较大倾斜的情况下,聚类效果不好。
- 聚类效果依赖于初始中心点,可能由于中心点选取不当而收敛到局部最优解。
4. 改进算法
4.1 K-Modes算法
在均值没有意义的情况下使用众数,比如说对于标称属性,均值显然没有意义。
4.2 K-Medoids算法
听说该算法可以降低极值所产生的影响,不过不大明白原理。
4.3 Mini-Batch K-Means算法
该算法是为了解决传统的K-Means算法在大数据集下耗时较长的问题。算法原理和K-Means算法在数据集的选取上有所不同,普通的K-Means算法每次迭代都是使用原始数据集中的所有数据进行迭代,而Mini-Batch算法则是在每次迭代时都从原始数据集中采取固定数量的样本作为本次迭代的数据集。
4.4 二分K-Means算法
该算法主要是解决K-Means算法陷入局部最优解的问题。该算法通过将原始数据集一分为二,之后再对每个类进行划分,以找到一个划分可以最大化的降低误差。(参考:机器学习实战P190)
未完待续