本节摘要:机器学习异常检测方法不再预设分布,而是让模型从数据中学习"正常模式",再用学到的模式判断新数据是否偏离。本节按监督(SVM、决策树、随机森林)、无监督(K-Means、DBSCAN、自编码器)、半监督(GAN)、集成(Isolation Forest)四种学习范式展开,讲清每种范式的数据需求与代价,并给出"按标签可得性选范式"的方法论。
阅读完本节,你应当能够:
统计方法有个天花板:它的"规律"要么靠分布假设,要么靠手工定义。但真实时序数据的规律往往没法用几个公式写出来——一台设备的正常振动模式,受转速、负载、环境温度、磨损程度的非线性组合影响,你没法用"均值±3σ"描述清楚。
机器学习方法的出现,就是为了解决"规律说不清、但能学"的问题。它不再问"数据服从什么分布",而是问:"能不能让模型自己从一堆历史数据里学到,正常的数据长什么样?"
但换来的代价同样直接:机器学习需要数据,而"异常检测的数据"往往很别扭。 正常样本堆积如山,异常样本凤毛麟角。这就引出了本章最核心的分岔路——你有多少带标签的异常数据?
这一节的目标,就是让你在三条路之间找准自己的入口。 选错了路,后面全白干。
监督学习把每个点标记为"正常/异常",训练分类器。代表性算法:SVM(学一个分隔超平面)、决策树/随机森林(学判别规则)、神经网络(学非线性边界)。
优点很直观:标签准确且充足时,精度可以很高,能捕捉复杂模式。
缺点更致命:需要大量标注数据,而异常标签恰恰是最难拿的(第 7 章会系统讲标签获取之痛)。此外,模型学的是"训练集里的异常",遇到没见过的异常类型,泛化能力堪忧——而这在异常检测里几乎是必然发生的。
无监督不需要标签,直接学数据的内在结构,异常 = 与正常结构显著不同。
聚类思路:K-Means 把点分成 K 簇,离所属簇中心远的点、或属于极小簇的点判为异常;DBSCAN 按密度聚类,密度稀疏的"噪声点"直接就是异常。
重构思路:自编码器把输入压缩到低维再还原,学的是"正常数据的压缩表示";异常点破坏了这种可压缩性,重构误差大。这个思路是第 6 章深度异常检测的地基,这里先记住概念。
优点:不用标签,适用面广,能发现"没见过"的异常。缺点:精度通常不如监督,且要仔细调算法与参数——无监督的"自由"同时意味着"没人告诉它对错"。
半监督用只有正常样本(或极少异常样本)的数据训练,学"正常"的边界,偏离边界即异常。这最贴合异常检测的现实——我们往往能拿到海量正常数据,但异常样本稀缺。
One-Class SVM:学一个把大部分正常数据包起来的超球/超平面,落在外面的点判异常。
Isolation Forest:用随机分割构造隔离树。异常点"容易被孤立"——少数几次分割就能把它单独切出来,所以路径短。它的树结构天然适合高维数据,速度快,是工程里使用率最高的无监督/半监督检测器之一。
半监督是"标签不足"场景的黄金折中:只学正常,不需要异常样本,还能捕捉复杂模式。
集成把多个弱模型组合成强模型。在异常检测里,不同模型看到的是同一数据的不同侧面——树模型看分割难度、距离模型看离群程度、密度模型看局部稀疏,组合起来能补彼此的盲区。第 5 章第 4 节会系统讲 Bagging/Boosting/Stacking,这里先记住价值:鲁棒、抗噪声、能捕捉复杂模式。

| 范式 | 标签需求 | 核心思路 | 代表算法 | 优点 | 缺点 |
|---|---|---|---|---|---|
| 监督 | 大量完整标签 | 分类 | SVM、随机森林 | 精度高、模式复杂 | 标签难拿、未知异常泛化差 |
| 无监督 | 无 | 学内在结构 | K-Means、DBSCAN、自编码器 | 无需标签、能发现新异常 | 精度有限、参数敏感 |
| 半监督 | 只有正常/极少异常 | 学正常边界 | One-Class SVM、Isolation Forest | 贴合现实、折中 | 参数敏感 |
| 集成 | 视基模型而定 | 组合互补 | 随机森林、Boosting、Stacking | 鲁棒、抗噪 | 计算贵、可解释差 |
大量生产环境的异常检测是从无监督/半监督起步的——不是因为它最好,而是因为标签获取周期太长(第 7 章会说),而业务等不起。先用 Isolation Forest 跑起来收集报警,人工确认后的确认/排除结果沉淀成标签,慢慢向监督学习演进。先无监督跑量,再监督提精度,是异常检测落地的标准节奏。
⚠️ 常见坑:以为无监督就是"零成本"。 无监督省的是标注费,花的是调参和校验费——K-Means 的 K、DBSCAN 的 eps/minPts、Isolation Forest 的污染率,每个参数都会改变"什么算异常",没人背书的检测结果在业务上寸步难行。
💡 关键直觉:异常检测里"样本不平衡"不是要克服的 bug,而是常态。 1% 的异常率意味着哪怕把所有点判正常,准确率也有 99%——但检测系统不能这么干。所以评估要盯着"异常那一类"的表现(召回、精确),而不是整体准确率,这个话题第 7 章会系统展开。
机器学习方法(除神经网络)都依赖第 2 章的特征工程:你喂进去的每一列特征,都在教模型"从哪个角度判断正常"。特征质量直接决定机器学习的上限。这也是"深度学习"登场的原因之一——当手工特征撑不住复杂模式时,让模型自己学特征。
假设你负责一家云厂商的存储集群监控,要判断"哪些节点行为异常"。三种数据条件对应三种选择:
三条路线的选择不是学术口味,而是数据条件的函数:你手头有什么,就走什么路。别羡慕监督学习的精度——如果标签条件不具备,监督学习的精度再高也与你无关。
坑一:特征泄漏。 把"未来"的信息(如整段序列的全局均值)编进特征,评估虚高、上线翻车——时序特征必须只用"当前时刻及之前"的信息。坑二:忽略类别不平衡。 异常率 1% 时模型容易"学成只会判正常",要用类别权重或重采样。坑三:模型漂移不监控。 数据分布随时间变,模型越跑越瞎,要定期重训。这三条坑几乎每个生产项目都会踩一遍,提前知道能省大量返工时间。
不能直接信。无监督的"异常"里混着真异常、正常波动的新常态、数据质量问题三类。正确用法是"机器出候选、人工来背书"——算法给连续分数,业务/专家定阈值,报警后人工复核,复核结果再回流改进系统。
因为它几乎为异常检测量身定做:不需要标签、线性复杂度、天然抗高维、调参少(主要就 contamination)、还能给连续异常分数。"够用 + 快 + 不挑数据"的组合,让它成为工业界事实上的默认检测器。
恰恰相反,它是"精度上限最高"的路线——条件满足时(标签充足、异常类型稳定),它的检测精度是其他路线追不上的。它的问题是"门槛高"而不是"能力弱",所以现实里往往是"半监督先跑量,标签攒够再监督"。
能,而且常常该组合。监督/无监督/半监督各自有盲区,用第 5.4 节的"分数合成"把它们组合起来(各给异常分数、标准化后加权),能显著提升整体鲁棒性。组合的前提是盲区互补,不是模型堆砌。
下一节把镜头拉到最复杂的一端——深度学习。当数据量大、模式非线性、手工特征不够用时,自动特征提取的深度模型开始登场,但"数据量大"本身也是它最硬的门槛。