3. 无监督学习工程回顾
无监督学习工程的核心困难在于:没有标签作为“正确答案”,所有判断都必须从数据自身的结构、分布和一致性中推导。因此,工程上不能只问“模型跑通了吗”,而要问“结构是否稳定、是否可解释、是否能在新数据上复现”。本节把聚类、降维、密度估计、异常检测四类任务放在同一条工程视角下回顾,重点说明它们各自的基本流程、评估指标与约束条件。
四类任务的基本流程与相互关系
聚类是把样本划分为若干组,使组内相似、组间差异大。典型流程是:确定距离或相似度定义 → 选择算法(K-Means、DBSCAN、层次聚类、GMM)→ 设定簇数或密度参数 → 迭代优化 → 输出簇标签与中心/密度结构。降维是把高维数据映射到低维表示,常见方法有 PCA、t-SNE、UMAP、自编码器。密度估计是估计数据在空间中的概率分布,如 KDE、GMM、归一化流。异常检测则寻找低密度或偏离主结构的样本,如孤立森林、LOF、One-Class SVM。
这四类任务并非孤立:降维常作为聚类和异常检测的预处理;密度估计为异常检测提供概率依据;聚类结果又可反过来解释降维后的结构。工程上要明确它们之间的数据流关系,而不是把它们当成四个独立脚本。
评估指标:没有标签时如何判断好坏
聚类评估分内部指标和外部指标。内部指标不依赖真实标签,常用轮廓系数(Silhouette,取值[-1,1],越大越好)、Calinski-Harabasz 指数(簇间离散度与簇内离散度之比)和 Davies-Bouldin 指数(越小越好)。外部指标需要已知标签,如 ARI、NMI,工程中常用于离线验证。实际项目里更值得关注的是稳定性:对数据做多次重采样或加噪,观察 ARI 是否稳定在 0.8 以上;若波动剧烈,说明簇结构不稳健。
降维评估要区分“可视化”和“特征压缩”两种目的。用于可视化时,关注邻域保持率(Trustworthiness)和类别分离度;用于下游建模时,直接看降维后特征在分类/回归任务上的表现。重构误差(PCA 的累计解释方差比、自编码器的 MSE)是基础指标,但解释方差达到 85% 并不等于下游任务一定更好。
密度估计评估常用对数似然和 AIC/BIC 做模型选择,但高维下似然容易失真。异常检测由于正负样本极度不平衡,准确率没有意义,应使用 AUC-ROC、Average Precision 和召回率@k。工程上还要固定阈值策略:是取分数最高的 top-k,还是按分位数(如 99%)设阈值,必须与业务误报成本挂钩。
工程约束:从实验到落地
第一是规模约束。K-Means 对百万级样本可用 MiniBatch 版本;DBSCAN 的邻域查询在稠密数据上代价高,可改用 HDBSCAN 或先降维。第二是延迟约束。在线异常检测要求单样本推理在毫秒级,孤立森林和 LOF 需要预计算或近似索引。第三是可复现约束。随机初始化(K-Means 的初始中心、UMAP 的随机种子)必须固定,否则同一份数据两次运行结果不同,无法排查问题。
第四是维度灾难。高维空间中距离趋于均匀,聚类和密度估计都会退化。工程做法是先做 PCA 保留 95% 方差,或使用余弦距离替代欧氏距离。第五是参数敏感性。DBSCAN 的 eps 和 minPts、GMM 的簇数、LOF 的 k 都需要通过稳定性曲线或领域知识确定,不能只靠默认值。
一个可复用的工程检查清单
| 阶段 | 检查项 | 判断依据 |
|---|---|---|
| 数据准备 | 缺失值、量纲、类别编码 | 标准化后各特征方差接近;缺失率<5% |
| 降维 | 保留维度、解释方差 | 累计方差≥85%,或下游任务不降 |
| 聚类 | 簇数、稳定性 | 重采样 ARI≥0.8;轮廓系数≥0.4 |
| 密度估计 | 模型选择、校准 | BIC 最小;KS 检验 p>0.05 |
| 异常检测 | 阈值、召回率 | AP≥0.7;召回率@k 满足业务要求 |
| 工程化 | 种子、版本、延迟 | 单样本推理<10ms;结果可复现 |
把上述流程串起来,无监督学习工程就不是“调一个算法”,而是一条从数据到结构、从结构到判断、从判断到约束的完整链路。聚类回答“分几组”,降维回答“怎么看清”,密度估计回答“哪里密”,异常检测回答“哪里不对”,而评估指标和工程约束决定这些回答是否可信、是否可用。