K-Means 算法
聚类是一种无监督的学习, 它将相似的对象归到一个簇中, 将不相似对象归到不同簇中.
相似这一概念取决于所选择的相似度计算方法.
K-Means 是发现给定数据集的 K 个簇的聚类算法, 之所以称之为 K-均值 是因为它可以发现 K 个不同的簇, 且每个簇的中心采用簇中所含值的均值计算而成.
簇个数 K 是用户指定的, 每一个簇通过其质心(centroid), 即簇中所有点的中心来描述.
聚类与分类算法的最大区别在于, 分类的目标类别已知, 而聚类的目标类别是未知的.
优点: 容易实现缺点:可能收敛到局部最小值, 在大规模数据集上收敛较慢使用数据类型 : 数值型数据
K-Means 场景
主要用来聚类, 但是类别是未知的.
例如: 对地图上的点进行聚类.
K-Means 术语
- 簇: 所有数据点点集合,簇中的对象是相似的。
- 质心: 簇中所有点的中心(计算所有点的均值而来).
- SSE: Sum of Sqared Error(平方误差和), SSE 值越小,表示越接近它们的质心. 由于对误差取了平方,因此更加注重那么远离中心的点.
有关 簇 和 质心 术语更形象的介绍, 请参考下图:
![5af24374a610f47bac2209e03ce2b740.png](https://i-blog.csdnimg.cn/blog_migrate/8f294176afb57495646c71a099abaa52.jpeg)
K-Means 工作流程
- 首先, 随机确定 K 个初始点作为质心(不是数据中的点).
- 然后将数据集中的每个点分配到一个簇中, 具体来讲, 就是为每个点找到距其最近的质心, 并将其分配该质心所对应的簇. 这一步完成之后, 每个簇的质心更新为该簇说有点的平均值.
上述过程的 伪代码 如下:
- 创建 k 个点作为起始质心(通常是随机选择)
- 当任意一个点的簇分配结果发生改变时
- 对数据集中的每个数据点
- 对每个质心
- 计算质心与数据点之间的距离
- 将数据点分配到距其最近的簇