欢迎光临
我们一直在努力

K-Means 聚类的目标函数:簇内误差平方和

1. 什么是 K-Means?

K-Means 是一种无监督、迭代式的聚类算法:
给定数据集 {x₁, x₂, …, xₙ} 与预设簇数 K,算法把样本划分为 K 个不相交的簇 C₁, C₂, …, Cₖ,使得同一簇内样本尽可能相似,不同簇间样本尽可能远离。

核心思想:
> “让簇内‘抱团’,让簇间‘疏远’。”


2. 目标函数 J:簇内误差平方和(WCSS)

K-Means 用几何距离衡量相似性,目标函数 J 定义为:
J=∑k=1K∑x∈Ck∥x−μk∥2
J = \\sum_{k=1}^{K} \\sum_{x \\in C_k} \\|x – \\mu_k\\|^2
J=k=1∑K​x∈Ck​∑​∥x−μk​∥2

  • μₖ:第 k 个簇的质心(centroid)
  • ‖x − μₖ‖²:样本到所属质心的欧氏距离平方
  • J 的物理意义:Within-Cluster Sum of Squares (WCSS),即“簇内误差平方和”

> 算法目标:找到使 J 最小的簇划分 {C₁,…,Cₖ} 与质心 {μ₁,…,μₖ}。


3. 迭代两步:坐标下降求 J

K-Means 采用坐标下降策略,交替更新两个变量:

步骤固定量优化量公式
E步 (Assignment) 质心 μₖ 样本归属 Cₖ Cₖ = {x : ‖x − μₖ‖² ≤ ‖x − μⱼ‖², ∀j}
M步 (Update) 簇 Cₖ 质心 μₖ μₖ = (1/Cₖ) ∑_{x∈Cₖ} x

示例:

def kmeans(X, K, max_iter=100):
n, d = X.shape
mu = X[torch.randperm(n)[:K]] # 随机初始化 K 个质心
for _ in range(max_iter):
# E步:计算距离并分配样本
dist = torch.cdist(X, mu) # (n, K)
labels = torch.argmin(dist, dim=1) # (n,)
# M步:重新计算质心
for k in range(K):
mask = labels == k
if mask.sum() > 0:
mu[k] = X[mask].mean(dim=0)
return labels, mu

赞(0)
未经允许不得转载:171主机测评 » K-Means 聚类的目标函数:簇内误差平方和
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址