机器学习基础:监督、无监督、半监督学习;回归、分类、聚类概览
好了,咱们正式进入机器学习的核心地带。
我刚开始接触机器学习时,其实也被这些概念搞得有点晕。监督、无监督、半监督……说白了,它们就是三种不同的“教学方式”。就像教孩子认字,你是给他看带标签的卡片,还是让他自己从一堆图片里找规律?
这一章,咱们就把这三个基本范式,以及它们对应的核心任务——回归、分类、聚类——彻底搞清楚。
机器学习的三种学习范式
这三种范式,核心区别在于数据有没有“标签”。什么是标签?就是正确答案。比如一张猫的图片,标签是“猫”这个字。一个问题对应的标准答案,就是标签。
一句话总结:
- 监督学习:有输入,有正确答案(标签)。模型学习从输入到答案的映射。
- 无监督学习:只有输入,没有正确答案。模型自己发现数据中的隐藏结构。
- 半监督学习:少量数据有标签,大量数据没标签。介于两者之间,非常实用。
我在项目中遇到过很多次数据标注成本过高的情况。这时候,半监督学习就是个好选择。你不用把所有数据都标一遍,也能训练出不错的模型。
1. 监督学习 (Supervised Learning)
这是最主流、最成熟的一种方式。你需要准备一份“带标签”的数据集。比如,你要教模型识别异常密钥,就得给它一堆正常密钥的样本(标签为“正常”)和一堆被破解或伪造的密钥样本(标签为“异常”)。
监督学习的两个主要任务:
- 回归 (Regression):预测一个连续的数值。比如预测明天的气温是多少度,或者预测一个用户的信用评分。
- 分类 (Classification):预测一个离散的类别。比如判断一封邮件是“垃圾邮件”还是“正常邮件”,或者判断一个网络请求是“正常”还是“攻击”。
我个人习惯这样记:
回归回答“是多少”,分类回答“是哪一类”。
在密钥异常检测中,我们绝大多数情况做的是二分类:正常 or 异常。
2. 无监督学习 (Unsupervised Learning)
这个就有点意思了。你只有一堆数据,连正确答案是什么都不知道。模型的任务是“自学成才”,自己去发现数据内部的规律。
无监督学习的核心任务是:
- 聚类 (Clustering):把相似的数据点自动归到一个类别(簇)里。比如,电商平台根据用户的购买行为,把用户分成“价格敏感型”、“品质追求型”等几个群体。模型事先并不知道这些群体叫什么,但它能根据数据特征找到它们。
你想想看,这在实际工作中非常有用。我曾经用聚类算法去分析服务器日志,结果发现了一些从未见过的异常模式。这些模式没有历史样本,监控系统根本发现不了。这就是无监督学习的魅力。
3. 半监督学习 (Semi-supervised Learning)
现实世界的数据,大部分是没标签的。给你100万条服务器日志,你不可能雇人一条条地标出“正常”和“异常”。但只标几百条还是可以做到的。
半监督学习就是解决这个问题的。先用少量有标签的数据训练一个基础模型,然后用这个模型去给大量无标签数据“打伪标签”。再把那些置信度高的伪标签数据加入到训练集中,反复迭代。
我曾经踩过一个坑:
在半监督学习的迭代过程中,如果初始模型很差,打出的伪标签错误率会很高。把这些“垃圾”数据再喂回去,模型会越学越歪。这叫“噪声累积”。
所以,一定要设置高置信度阈值,只取那些模型非常有把握的伪标签数据。
三种学习范式的对比速查
好了,我们把核心区别整理成一张表,这样更清楚。
| 学习范式 | 数据标签 | 核心任务 | 典型算法 | 密钥异常检测中的应用 |
|---|---|---|---|---|
| 监督学习 | 有(全量) | 回归、分类 | 线性回归、逻辑回归、SVM、随机森林、神经网络 | 已知历史攻击样本,训练分类模型 |
| 无监督学习 | 无 | 聚类、降维、异常检测 | K-means、DBSCAN、PCA、孤立森林、自编码器 | 发现未知攻击模式、基线画像 |
| 半监督学习 | 少量有标签,大量无标签 | 分类、聚类 | 自训练、协同训练、标签传播、MixMatch | 利用专家标注的少量样本,提升大规模日志的检测率 |
回归、分类、聚类——三个核心任务的深入对比
这三种任务,是机器学习解决具体问题的基本动作。
1. 回归 (Regression) —— 预测连续值
举个例子:预测服务器在下一分钟的CPU使用率是多少。这是一个连续值(比如85.7%)。
回归模型的输出是一个具体的数字。常见的算法有线性回归、决策树回归。
在密钥检测中,回归用得不多,但也不是没用。比如,我们可以用回归模型来预测“正常”密钥的哈希值分布范围。一旦实际值偏离太远,就触发警报。
2. 分类 (Classification) —— 预测离散类别
这是密钥异常检测的主战场。
模型的任务是输出一个类别。比如“正常(0)”或“异常(1)”。这就是二分类。如果需要识别多种异常类型(比如“暴力破解”、“撞库”、“密钥伪造”),那就是多分类。
关键点:
在分类任务中,我们不仅关注模型“分对了没有”,更关注它对异常样本的捕捉能力。因为异常样本是少数,模型很容易“学坏”,把所有样本都判成正常。
常见的评估指标有:准确率、精确率、召回率、F1值。但在这里,我特别强调召回率(Recall)和精确率(Precision)。
- 召回率:所有真正的异常中,我们找出了多少。这决定了“漏报”的比例。
- 精确率:我们判为异常的所有样本中,有多少是真的异常。这决定了“误报”的比例。
在安全领域,我们常常愿意牺牲一点精确率(容忍一些误报),去换取更高的召回率(不漏掉任何攻击)。
3. 聚类 (Clustering) —— 发现未知群体
分类需要你事先知道有哪些类别。但聚类不需要。它会自动把相似的数据点分在一起。
想象一下,你有一堆密钥请求数据,但不知道哪些是正常的,哪些是异常的。你运行一个聚类算法,它会自动把数据分成几个“簇”。
你可能会发现一个非常庞大的簇(大概率是正常请求),以及几个非常小的、离群的簇。这些小簇里,很可能就藏着我们从未见过的新型异常。
我在项目中就用过这种方法,发现了一个以前没人注意到的“低频扫号”行为。那个攻击者很聪明,每次都只试一个账号,频率很低,传统的频率阈值规则根本抓不到。但聚类算法把它和正常行为分开了,因为它访问的密钥模式很奇怪。
好了,这一章的内容就这些。理解这三种范式和三个任务,是打开机器学习大门的第一步。后面咱们要讲的异常检测算法,基本都是这些思想的变体和应用。