3. 无监督学习工程回顾

无监督学习工程的核心困难在于:没有标签作为“正确答案”,所有判断都必须从数据自身的结构、分布和一致性中推导。因此,工程上不能只问“模型跑通了吗”,而要问“结构是否稳定、是否可解释、是否能在新数据上复现”。本节把聚类、降维、密度估计、异常检测四类任务放在同一条工程视角下回顾,重点说明它们各自的基本流程、评估指标与约束条件。

四类任务的基本流程与相互关系

聚类是把样本划分为若干组,使组内相似、组间差异大。典型流程是:确定距离或相似度定义 → 选择算法(K-Means、DBSCAN、层次聚类、GMM)→ 设定簇数或密度参数 → 迭代优化 → 输出簇标签与中心/密度结构。降维是把高维数据映射到低维表示,常见方法有 PCA、t-SNE、UMAP、自编码器。密度估计是估计数据在空间中的概率分布,如 KDE、GMM、归一化流。异常检测则寻找低密度或偏离主结构的样本,如孤立森林、LOF、One-Class SVM。

这四类任务并非孤立:降维常作为聚类和异常检测的预处理;密度估计为异常检测提供概率依据;聚类结果又可反过来解释降维后的结构。工程上要明确它们之间的数据流关系,而不是把它们当成四个独立脚本。

无监督学习四类任务的工程数据流与评估闭环 原始数据 特征矩阵 X (n×d) 预处理 标准化 / 缺失值 / 编码 降维 PCA / UMAP / AE 聚类 K-Means / DBSCAN 密度估计 KDE / GMM 异常检测 iForest / LOF 评估与诊断 轮廓 / 稳定性 / 重构 工程约束 规模 / 延迟 / 可复现 参数调整与模型选择反馈 关键评估指标对照 聚类:轮廓系数、Calinski-Harabasz、DB 指数、簇稳定性(重采样 ARI) 降维:重构误差、Trustworthiness、邻域保持率、下游任务增益 密度估计:对数似然、AIC/BIC、KS 检验、校准曲线 异常检测:AUC-ROC、Average Precision、召回率@k、误报率

评估指标:没有标签时如何判断好坏

聚类评估分内部指标和外部指标。内部指标不依赖真实标签,常用轮廓系数(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;结果可复现

把上述流程串起来,无监督学习工程就不是“调一个算法”,而是一条从数据到结构、从结构到判断、从判断到约束的完整链路。聚类回答“分几组”,降维回答“怎么看清”,密度估计回答“哪里密”,异常检测回答“哪里不对”,而评估指标和工程约束决定这些回答是否可信、是否可用。