9.2. K均值算法的过程与实现

本文最后更新于 2024年1月27日 下午

K均值算法的过程与实现

K均值算法(K-Means)是一种流行的聚类算法。

执行过程

以如下数据集的例子来说明K均值算法的执行过程:

对于如图所示的数据集,使用K均值算法将其分成两类数据。
K均值算法的第一步是在数据集中随机生成两点,称为聚类中心(Cluster Centroid)。(要分为多少类,就要生成多少个聚类中心)
K均值算法是一个迭代算法,每一次迭代过程分为两部分:
1. 簇分配
K均值算法会遍历每一个数据,计算该点与每一个聚类中心的距离,该点会被归属到最近的聚类中心。
2. 移动聚类中心
移动聚类中心到当前集群的平均位置。

之后K均值算法会重复上述两步,直到聚类中心不再移动,此时可以认为聚类已经实现。

实现

算法输入

  • 簇的数量: \(K\)
  • 训练集: \(\{x^{(1)},x^{(2)},...,x^{(m)} \}\)
    对每一个数据而言,\(x^{(i)}\)都是一个n维的向量。

算法过程

K均值算法首先会随机初始化聚类中心\(μ_i\)
Repeat{
# 计算每个聚类中心到该点的距离,并返回最近距离的聚类中心标签
for \(i=1\) to \(m\)
\(c^{(i)}\):=index(from 1 to \(K\)) of cluster centroid closest to \(x^{(i)}\) 或者 \(c^{(i)}\):=\(min||x^{(i)}-μ_k||^2\)
# 移动聚类中心
for \(k=1\) to \(K\)
\(μ_k\):=arverage of points assigned to cluster \(k\)
}

如果此时出现所有点都不属于某一个聚类中心的情况,则可以直接移除这个聚类中心,或者重新随机初始化这个聚类中心

代价函数

K-Means算法的代价函数会重点跟踪如下的两个参数的变化规律:
\(c^{(i)}\):当前每一个样本\(x^{(i)}\)所属的聚类中心\(μ_c^{(i)}\)对应的标签
\(μ_k\): 聚类中心的位置
代价函数以如下形式表示:
\[J(c^{(1)}...c^{(m)},μ_1...μ_K)=\frac{1}{m}∑_{i=1}^{m}||x^{(i)}-μ_c^{(i)}||^2\] 代价函数的目标是找到使得\(J(c^{(1)}...c^{(m)},μ_1...μ_K)\)最小化的\(c^{(1)}...c^{(m)},μ_1...μ_K\)

重回K-Means算法的执行过程: 计算每个聚类中心到该点的距离,并返回最近距离的聚类中心标签的实质是保持\(μ_1...μ_K\)固定,而找到使得\(J\)最小化的\(c^{(i)}\)
移动聚类中心的实质是保持\(c^{(1)}...c^{(m)}\)不变,找到使得\(J\)最小化的\(μ_k\)


9.2. K均值算法的过程与实现
https://l61012345.top/2021/07/26/机器学习——吴恩达/9. K-Means算法/9.2. Kmeans算法/
作者
Oreki Kigiha
发布于
2021年7月26日
更新于
2024年1月27日
许可协议