📚 算法步骤
- 随机选 $K$ 个质心(簇中心)
- 分配:每个点归到最近的质心
- 更新:质心移到该簇所有点的均值
- 重复 2~3 直到收敛
目标:最小化簇内平方和(WCSS / Inertia)。
🎮 交互演示
0迭代次数
—WCSS
待初始化状态
❓ K 的个数能自动获取吗?
结论:K-Means 算法本身不能自动给出 $K$。你必须事先指定簇的数量(本演示左上角的「K =」),算法只负责在给定 $K$ 下找质心与划分。这是无监督学习的典型难点:没有「标准答案标签」,簇数属于超参数,需要额外方法或业务经验来估计。
实践中常用以下方式辅助选 K(可结合使用,没有万能公式):
📉 肘部法则(Elbow)
对多个 $K$ 分别聚类,画 WCSS(簇内平方和)随 $K$ 变化的曲线。$K$ 增大时 WCSS 单调下降;在「再增加 K 收益明显变小」的拐点(像手肘)处,常作为较合理的 $K$。
📐 轮廓系数(Silhouette)
衡量点与同簇/邻簇的分离程度,取值 $[-1,1]$,越大越好。对每个候选 $K$ 算平均轮廓系数,取最大值对应的 $K$(sklearn 等库可直接算)。
📊 Gap Statistic
比较真实数据的 WCSS 与「随机均匀分布」下的期望 WCSS,选 Gap 最大的 $K$。对非球形簇相对稳健,但计算更重。
🧠 领域知识
例如:客户分 3 档、图像已知 5 类、地图要划 4 个片区——业务上已有分组意图时,$K$ 往往由场景决定,再辅以上述指标验证。
为何不能「完全自动」? 真实数据可能没有清晰分离的簇,或簇形状、密度差异大;不同 $K$ 可能都「说得通」。自动方法给出的是启发式建议,最终仍需结合可视化(如下方散点图)与业务含义确认。
📉 肘部法则扫描(交互)
对当前散点数据,自动尝试 $K=2,3,\ldots,6$,各运行 K-Means 至收敛,绘制 WCSS 曲线并估计肘点。
点击「扫描」查看 WCSS 曲线与建议 K
⚠️ 注意事项
- 需预先指定 $K$ 或用肘部法则 / 轮廓系数等方法估计
- 对初始质心敏感,常多次运行取 WCSS 最小的结果
- 假设簇是凸形、大小相近;非球形簇效果差(可考虑 DBSCAN、GMM)