2. 机器学习基础回顾:监督学习、无监督学习、半监督学习

好,咱们正式进入技术部分之前,我先带大家快速回顾一下机器学习的三个基本范式。为什么非要翻旧账?因为我发现不少同学在实际项目里,连“该用哪种学习方式”都没想清楚就开始调参——嗯,最后模型跑不起来,回头一看,数据标签都没标对。我以前在做一个内网异常流量检测的项目时,就踩过这个坑,后来花了两周补标签,才把模型救回来。所以,先把基础打牢,后面才不会走弯路。

简单来说,这三种学习方式的核心差别就一句话:数据有没有标签?有多少标签? 下面我逐一展开讲,每个我都会结合咱们这门课的主题——异常访问识别——来举例,确保你能直接套用。

2.1 监督学习:有老师带着学

监督学习,说白了就是“喂”给模型一堆已经标好答案的数据。比如你有一万条用户访问日志,每条日志都已经人工标注了“正常”或“异常”。模型的任务就是从这些“正确答案”里学会规律,以后看到新日志就能自己判断。

我习惯把它理解成请了一个家教。老师(标签)反复告诉你:这个特征是异常的,那个特征是正常的。模型慢慢就记住了。在异常访问场景中,最常见的监督算法有:

  • 逻辑回归 – 快、可解释性强,适合快速筛选。
  • 决策树 / 随机森林 – 能处理非线性关系,不容易过拟合。
  • 支持向量机 (SVM) – 在小样本高维数据上表现不错。
  • XGBoost / LightGBM – 工业界异常检测比赛的常胜将军。
我的经验: 做异常访问识别时,如果标签质量高、数量充足(比如每类样本都有几千条),我首选 XGBoost。它自带处理缺失值和特征重要性排序,省去很多预处理时间。你可以在后面实验章节里亲自试一试。

但问题来了——现实中异常行为本来就少,一个系统可能一年只有几十条真正的高危告警。你要是硬上监督学习,模型会因为正负样本极度不平衡而“学废”。这时候就需要考虑无监督或半监督方案了。

2.2 无监督学习:没人管,自己找规律

无监督学习是模型完全没有标签,全靠数据自身的分布或结构来“聚类”或“降维”。你想想看:如果你把一万条日志扔给 K-Means 算法,它不会告诉你哪条是异常,但会把相似的日志归到一起。那些离所有簇都很远的点,往往就是异常点。

在异常访问识别中,无监督学习特别适合以下场景:

  • 你还没有人工标注过任何数据。
  • 异常模式不断变化,偷懒不想每次重新标。
  • 想先用无监督方法快速发现可疑样本,再集中人力分析——我管这叫“半自动化狩猎”。

常用的无监督方法包括:

  • K-Means / DBSCAN – 基于距离的聚类,DBSCAN 能自动识别噪声点。
  • 孤立森林 (Isolation Forest) – 专为异常检测设计,用随机分割快速隔离异常点。
  • 自编码器 (Autoencoder) – 深度学习中还原误差大的样本视为异常。
  • PCA / t-SNE – 降维后直观观察离群点。
避坑指南: 我曾经在一个客户系统上直接用 K-Means 做异常检测,结果发现聚类中心被正常流量拉偏,完全看不到异常。后来换成 DBSCAN,才把稀少的攻击行为揪出来。记住:无监督学习高度依赖特征工程和距离度量,特征选不好,再好的算法也白搭。

2.3 半监督学习:少量标签 + 大量无标签

半监督学习是前两者的折中。你手里只有少量标签(比如几十条),但海量的未标注数据。模型如何利用那几十条“种子”去学会识别所有正常和异常?常见做法有两种:

  1. 自训练 (Self-training) – 先用有标签数据训练一个初版模型,让它对无标签数据做出预测,选出高置信度的预测结果作为“伪标签”,再重新训练。
  2. 协同训练 (Co-training) – 用两个不同视角的特征训练两个模型,互相为对方提供新标签。

我觉得这在现实中最实用。你想想看,一个安全团队能标多少条日志?一天能标几百条就不错了,但系统每天可能产生上千万条。半监督学习恰好完美平衡了人工成本和模型效果。

对比维度 监督学习 无监督学习 半监督学习
是否需要标签 必须全部有标签 完全不需要 少量标签 + 大量无标签
典型任务 分类、回归 聚类、异常检测、降维 分类(利用无标签数据提升精度)
异常识别适用场景 已知攻击类型,标签充足 未知攻击 / 零日漏洞 少量已知攻击 + 海量日常流量
模型复杂度 中等,依赖特征工程 较低,但易受噪声影响 较高,需要训练策略
评估方式 准确率、精确率、召回率、F1 轮廓系数、Davies–Bouldin 指数 在有标签验证集上评估 + 人工审查

为什么会这样?因为半监督学习的关键假设是:相似的样本应该属于同一类。只要少量种子能代表整体分布,就能把大部分无标签数据正确分类。我参与过的一个 Web 防火墙项目,当时只标了 500 条攻击日志,剩下 50 万条未标,用半监督 self-training 硬是做到了 98% 的召回率——当然,误报也多了点,后面再用规则过滤。

核心启发: 你不需要把所有的异常都标好才能开始建模。先搞几十条最有代表性的样本,然后让模型自己“半自动化”学习,效率会高很多。咱们在后面的章节会专门用实战案例演示半监督学习在异常访问识别中的完整流程。
三类学习方式的对比关系图 机器学习三大范式在异常访问识别中的应用 原始访问日志 有标签数据 无标签数据 少量标签 + 大量无标签 监督学习模型 无监督学习模型 半监督学习模型 异常识别结果(正常/异常) 解:三种学习方式的区别在于“标签参与程度”,实际项目中可组合使用(如先用无监督聚类筛查,再用半监督打标迭代)。

上图清晰的展示了三种学习方式在异常访问识别中的数据流向。记住:没有最好的范式,只有最适合当前数据条件的范式。在接下来的章节里,我会带你用真实日志数据分别走完监督、无监督和半监督的完整建模流程。你会发现,很多看似复杂的问题,只要选对了学习范式,代码量其实非常少。