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

K-Means 聚类的目标函数:簇内误差平方和
1. 什么是 K-MeansK-Means 是一种无监督、迭代式的聚类算法给定数据集{x₁, x₂, …, xₙ}与预设簇数K算法把样本划分为K个不相交的簇C₁, C₂, …, Cₖ使得同一簇内样本尽可能相似不同簇间样本尽可能远离。核心思想 “让簇内‘抱团’让簇间‘疏远’。”2. 目标函数 J簇内误差平方和WCSSK-Means 用几何距离衡量相似性目标函数J定义为J∑k1K∑x∈Ck∥x−μk∥2 J \sum_{k1}^{K} \sum_{x \in C_k} \|x - \mu_k\|^2Jk1∑K​x∈Ck​∑​∥x−μk​∥2μₖ第k个簇的质心centroid‖x − μₖ‖²样本到所属质心的欧氏距离平方J的物理意义Within-Cluster Sum of Squares (WCSS)即“簇内误差平方和”算法目标找到使J最小的簇划分{C₁,…,Cₖ}与质心{μ₁,…,μₖ}。3. 迭代两步坐标下降求 JK-Means 采用坐标下降策略交替更新两个变量步骤固定量优化量公式E步(Assignment)质心μₖ样本归属CₖCₖ {x : ‖x − μₖ‖² ≤ ‖x − μⱼ‖², ∀j}M步(Update)簇Cₖ质心μₖμₖ (1/Cₖ) ∑_{x∈Cₖ} x示例defkmeans(X,K,max_iter100):n,dX.shape muX[torch.randperm(n)[:K]]# 随机初始化 K 个质心for_inrange(max_iter):# E步计算距离并分配样本disttorch.cdist(X,mu)# (n, K)labelstorch.argmin(dist,dim1)# (n,)# M步重新计算质心forkinrange(K):masklabelskifmask.sum()gt;0:mu[k]X[mask].mean(dim0)returnlabels,mu