K-means算法术语
- 簇:所有数据点的集合,簇中的对象是相似的
- 质心:簇中所有数据点的中心(计算所有点的均值而定)
- SSE:Sum of Sqared Error(平方误差和)
SSE值越小,表示越接近它们的质心,由于对误差取了平方,因此更加专注远离中心的点
K-Means工作流程
- 首先,随机确定K个初始点作为质心(不是数据中的点)
- 然后将数据集中的每个点分配到一个簇中,具体来讲,就是为每个点找到距离最近的质点,并将其分配该质点所对应的簇,这一步完成以后,每个簇的质心,更新为该簇所有点的平均值.
创建K个点作为初始质点 当任意一个点的簇分配结果发生变化时
伪码
- 对数据集中的每个数据点
- 对每个质心
- 计算质心与数据点之间的距离
- 将数据点分配到距离其最近 的簇
- 对每一个簇计算簇中所有点的均值,并将均值作为质心
K-means开发流程
- 收集数据:使用任意方法
- 准备数据:需要数值型数据类计算距离,也可以将标称型数据映射为二值数据在用于计算
- 分析数据:使用任意方法
- 训练算法:此步骤不适用于k-means算法
- 测试算法:应用聚类算法,观察结果。可以使用量化的误差指标(误差平方和)来评价算法的结果
- 使用算法:可以应用于所希望的任何应用。通常情况下,簇质心可以代表整个簇的数据;来做出决策
将文件加载数据集
计算两个向量的欧氏距离
欧氏距离欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个 点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之 间的实际距离。
构建包含K个随机质心的集合
K-Means聚类算法的缺陷
可能偶尔会陷入最小值(局部最优,但全局不是最优),如图
为了克服K-Means算法收敛于最小值的情况,提出了二分K-Means算法
二分K-Means聚类算法
- 该算法首先将所有点作为一个簇,然后将簇一分为二。
- 然后选择其中一个簇进行划分,选择哪一个簇进行划分取决于对其划分时候可以最大程度降低SSE(平方和误差)的值。
- 上述基于SSE的划分过程不断重复,直到得到用户指定的簇数目为止。
二分K-Means簇类算法伪代码
- 将所有点看成一个簇
- 当簇数目小于k时
- 对于每一个簇
- 计算总误差
- 在给定的簇上面进行K-Means聚类(K=2)
- 计算将该簇一分为二之后的总误差
- 选择使得误差最小的那个簇进行划分操作