K-Means 聚类 · 深度手册
分类:聚类分类 | 难度:★☆☆ 入门 | 编号:
kmeans
一、这是什么(一句话用途)
无标签数据分 k 组(客户分群 / 异常检测)
二、核心思想
K-Means 是最普及的聚类算法,假设数据可分成若干个"凸且等方差"的簇。它用一个极简的目标——最小化所有样本到其所属簇质心的平方距离之和——来驱动迭代:先随机放 个质心,把每个点归到最近的质心,再重新计算每个簇的质心位置,如此反复直到质心不再明显移动。它快、易实现、对中等规模数据效果好;但对 的选择、初始质心和离群点敏感,且只能发现球形簇。
三、数学原理与推导
目标函数(簇内平方误差和,SSE):
其中 为第 簇质心, 表示样本 属簇 。
Lloyd 算法交替优化(坐标下降):
- 固定 ,最优分配显然是把点分给最近质心: 当 ;
- 固定 ,对 求导 ,得质心为簇内均值:
两步交替使 单调不增,收敛到局部极小。 常用肘部法(SSE 随 下降的拐点)或轮廓系数选定。
四、建模 / 求解步骤
- 选 k
- 随机初始化质心
- 分配点到最近质心
- 重算质心
- 重复至收敛
五、关键公式速查
J=ΣΣ‖x−μ_c‖²,最小化簇内平方和中值
六、典型示例
用户消费数据 → 分高 / 中 / 低价值客群做差异化服务。
完整算例(数字演示,照着算一遍)
场景:8 个点 2 维,K=2。初心 (1,1),(5,5)。
迭代收敛:簇1={(1,1),(1,2),(2,1),(2,2)} 中心(1.5,1.5);簇2={(4,5),(5,4),(5,5),(6,5)} 中心(5,4.75)。
结论:收敛为左下、右上两类。
七、Python 实现示例
import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","kmeans.csv"))
X = df[["x","y"]].to_numpy(dtype=float)
rng=np.random.default_rng(6); K=3
mu=X[rng.choice(len(X),K,replace=False)]
for _ in range(50):
c=np.argmin(((X[:,None]-mu)**2).sum(2),1)
mu=np.array([X[c==k].mean(0) for k in range(K)])
print("簇中心:\n", np.round(mu,2))
print("簇大小:", np.bincount(c, minlength=K))
配套文件:
py_kmeans.py(需 numpy / pandas;与下方数据集配套练习)
八、MATLAB 实现示例
%% K-Means 示例(MATLAB/Octave)
df = readtable('..\datasets\kmeans.csv');
X = table2array(df(:,1:2));
rng(6); K=3; mu=X(randsample(height(X),K),:);
for i=1:50
c=zeros(height(X),1);
for k=1:height(X), d=sum((X(k,:)-mu).^2,2); [~,c(k)]=min(d); end
for k=1:K, mu(k,:)=mean(X(c==k,:),1); end
end
disp(mu); tabulate(c)
配套文件:
m_kmeans.m(基础 MATLAB / Octave 即可运行)
九、练手数据集(可下载)
60 个二维点(含 3 个自然簇的标签,仅供校验)。用于 K-Means 聚类并对比真实簇。
- 字段:x, y, grp
- 行数:60 行
- 下载:
kmeans.csv
十、常见误区与避坑清单
- k 要预先定(肘部法)
- 对初始质心 / 离群点敏感
- 仅适合凸簇
十一、结果怎么解读
看簇大小与轮廓系数;异常小簇可能是离群。
十二、常与谁搭配
非凸用 DBSCAN。
十三、论文写作技巧(怎么把它写进论文)
把 K-Means 聚类 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。
1. 动机怎么写(为什么用它而不是别的)
区分你要的是无监督划分(聚类)还是有监督判别(分类)。说明特征维度与样本量,以及为什么选 K-Means 聚类(如非线性边界用核方法、高维稀疏用线性、需概率输出用贝叶斯)。
2. 结果怎么写(图表与指标)
聚类给散点图着色 + 轮廓系数 / 肘部图;分类给混淆矩阵 + 准确率 / F1 / ROC 曲线。特征重要性图能加分。
3. 可直接套用的写作话术
- 中文模板:针对<问题>,本文采用 K-Means 聚类 进行无标签数据分 k 组(客户分群 / 异常检测)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
- 英文模板:To address
, we adopt K-Means 聚类 to 无标签数据分 k 组(客户分群 / 异常检测). Benefiting from its ability to , it outperforms on .
4. 同类易踩的写作坑
聚类要说明簇数怎么定(不是拍脑袋);分类要交代训练 / 测试划分与交叉验证,避免过拟合误报高精度。
5. 典型论文段落范例(可直接参考 / 改写)
下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。
为揭示客户群体的内在结构,本文采用 K-Means 聚类 将 1,200 条样本划分为 4 类(轮廓系数=0.61),各类在消费频次与客单价上差异显著,为精准营销提供依据。
To reveal the intrinsic structure of customers, we apply K-Means 聚类 to partition 1,200 samples into 4 clusters (silhouette=0.61); the groups differ markedly in purchase frequency and average order value, supporting targeted marketing.
十四、相关手册(延伸阅读)
(暂无直接关联手册,可前往手册库浏览其它算法)
十五、本手册导航
本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。