K-Means 算法的原理可以概括为通过迭代找到数据集中的 K 个簇中心,将数据点分配到距离最近的簇中,最终使得每个簇内的点尽可能紧密地聚集在一起。它是一种无监督学习算法,通常用于对数据进行聚类分析。
原理
-
选择初始簇中心:
- 首先,选择 K 个初始的簇中心(通常是随机选择,或使用 K-Means++ 方法进行优化选择)。
-
分配数据到最近的簇中心:
- 对于每一个数据点,根据其与各个簇中心的距离,将数据点分配到距离最近的簇。这里的距离通常是 欧几里得距离:
-
重新计算簇中心:
- 对每个簇,重新计算其中心(质心)。新的中心是该簇中所有数据点的坐标的平均值。
-
重复分配和计算:
- 使用新的簇中心,再次重复步骤 2 和步骤 3,直到簇中心不再变化或者变化非常小。
迭代过程
K-Means 算法通过不断迭代来优化簇中心的位置,直到找到一个局部最优解。算法结束的标准通常是:
- 簇中心稳定:即簇中心在连续两次迭代后不再发生变化。
- 达到最大迭代次数:通常为了防止算法陷入无休止的迭代,会设定一个最大迭代次数。
优化目标
K-Means 算法的目标是最小化 簇内平方误差(Within-Cluster Sum of Squares, WCSS),其数学表达式为:
其中:
- 是簇的数量,
- 是第 i个簇,
- 是第i个簇的中心,
- 是数据点,表示数据点与簇中心之间的距离。
实践
我们有 8 个二维坐标数据点:
- A1 = (2, 10), A2 = (2, 5), A3 = (8, 4), A4 = (5, 8), A5 = (7, 5), A6 = (6, 4), A7 = (1, 2), A8 = (4, 9)
- 假设初始每个簇的中心分别是A1、A4和A7。
步骤1:计算每个点到簇中心的距离:
结果如下:
- 簇 1:A1
- 簇 2:A3, A4, A5, A6, A8
- 簇 3:A2, A7
注:这里簇中心为A1,A4,A7点所以可能不太明显
步骤2重新计算簇中心
- 簇 1 只有 A1,新的中心就是 A1 本身:
- 簇 2 包含 A3、A4、A5、A6 和 A8,新的质心为:
- =
- 簇3
- =
再次计算每一个点到新簇中心的距离
得到新的簇中心以及每个点的分类为:
Cluster 1 :{A1, A8}
Cluster 2 : {A3, A4, A5, A6}
Cluster 3 : {A2, A7}
下面为可视化图,其中红色为簇中心
并且可以得到新的簇中心位置为:
New_centroids1 =
New_centroids2 =
New_centroids3 =
接着根据继续计算点到新簇的距离,以判断该点的类别(Iteration 3)
分类结果为:
Cluster 1 :{A1, A4, A8}
Cluster 2 : {A3, A5, A6}
Cluster 3 : {A2, A7}
可视化结果如下:
并计算新的簇心为:
𝑁𝑒𝑤 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑𝑠1 =
𝑁𝑒𝑤 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑𝑠2 =
𝑁𝑒𝑤 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑𝑠3 =
同理计算每个点到新簇心距离并继续分类
分类结果为:
Cluster 1 :{A1, A4, A8}
Cluster 2 : {A3, A5, A6}
Cluster 3 : {A2, A7}
可视化:
新簇心为:
𝑁𝑒𝑤 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑𝑠1 =
𝑁𝑒𝑤 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑𝑠2 =
𝑁𝑒𝑤 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑𝑠3 =
到此我们可以发现分类的结果不再变化,并且簇心不再变化,迭代完成。
Tips:
K-Means 算法通过不断迭代来优化簇中心的位置,直到找到一个局部最优解。算法结束的标准通常是:
- 簇中心稳定:即簇中心在连续两次迭代后不再发生变化。
- 达到最大迭代次数:通常为了防止算法陷入无休止的迭代,会设定一个最大迭代次数。