跳转至

P4-2.2 无监督学习

Section ID: P4-2.2 Version: v2026.07.20

在 P4-2.1 里,我们看的是用带 label 的案例训练 model 的监督学习。这一次要看的是:在没有 label 的数据里寻找结构的无监督学习。

无监督学习并不是 没有答案就随便学。它更准确地说,是在没有人工预先贴好 label 的情况下,去寻找数据中的相似性、分组、坐标轴、密度或异常点的方法。这里 model 常常不是在匹配某个答案,而是在做出结构候选,好让人更好地理解数据,或为下一步工作做准备。

这一节会说明 unsupervised learning在没有标签时阅读结构clusteringdimensionality reduction 之间的大体区分。后面的章节会带着这个抓手继续判断当前语境,而 结构探索到底是什么意思 这个基础含义,会通过本节和 概念词汇表 再次接回。

本节范围

这一节先把 无监督学习在没有标签的数据中读取结构时处理的是哪些问题 关上。k-means 和 DBSCAN 会在 P4-17 聚类部分继续处理,PCA 和 t-SNE 会在 P4-18 降维部分继续处理。

  • 没有 label,到底是什么意思?
  • 无监督学习在学什么?
  • clustering、dimensionality reduction、outlier detection 分别是什么问题?
  • 为什么无监督学习的结果必须谨慎解释?
  • 在真实工作里,监督学习和无监督学习会怎样接起来?

用无监督学习留下的判断标准

  • 能把无监督学习说明成 在没有标签的数据里寻找结构的方法
  • 能用例子区分 clustering、dimensionality reduction、outlier detection。
  • 能说明 相似数据会被分到一起 并不自动等于有了有意义的正确答案。
  • 能理解无监督学习的结果仍然需要人去解释和复核。
  • 能说明无监督学习可以作为后续监督学习或数据分析的准备阶段。

先用一个场景来理解

想一想网店里的客户数据。假设现在有下面这些信息,但还没有像 优质客户流失风险普通客户 这样的标签。

客户 最近 30 天访问次数 购买次数 平均购买金额 优惠券使用
客户 A 20 8 经常使用
客户 B 3 0 几乎不用
客户 C 18 7 经常使用
客户 D 5 1 偶尔使用

如果是监督学习,每个客户可能已经有 优质客户流失风险普通客户 之类的 label。但在无监督学习里,开始时没有这些 label。于是问题就变成:相似客户会不会自然分到一起、哪些轴能把它们区分开、以及有没有特别不一样的客户。

这里最重要的一点是,model 并不会自动理解 客户类型 的意义。它可以找出相似模式,但这个分组究竟代表 高价值客户优惠券敏感客户,还是 临时参加活动的人,仍然需要人结合数据和业务语境来解释。

即便是同一张客户表,在无监督学习里,它也不是 拿来匹配答案标签的表,而是 拿来阅读结构候选的表。下面这张图展示的,就是同一份输入表,怎样分出 cluster candidates、reduced view 和 outlier candidate。

flowchart TD
  A["客户表<br/>访问 / 购买 / 金额 / 优惠券使用"]
  B["聚类候选<br/>活跃 / 浏览中 / 沉睡"]
  C["降维视图<br/>二维行为地图"]
  D["异常点候选<br/>不寻常的购买模式"]
  E["人工解释<br/>命名并检查"]
  F["下一步任务<br/>分析或监督学习"]

  A --> B
  A --> C
  A --> D
  B --> E
  C --> E
  D --> E
  E --> F

和监督学习比较来看

监督学习和无监督学习,从数据的形状开始就不一样。

区分 监督学习 无监督学习
数据 输入 X 和 label y 同时存在 只有输入 X,没有显式的 y
问题 这个输入的正确输出是什么? 这些数据里面有什么结构?
代表问题 classification、regression clustering、dimensionality reduction、outlier detection
结果解释 更容易用真实 label 直接比较性能 结果的意义需要人来解释和验证
例子 预测一封邮件是垃圾还是正常 先把相似邮件类型分组

因为没有 label,所以在无监督学习里,很难像监督学习那样简单地说 答对了多少百分比。相反,更需要问的是:这个分组对业务有没有意义、可视化是否真的帮助理解、异常候选是否值得实际检查。

按流程来看

无监督学习的基本流程可以读成下面这样。

flowchart TB
  A["1. 无标签数据<br/>只有 X"]
  B["2. 表示方式<br/>选择特征"]
  C["3. 结构候选<br/>簇 / 坐标轴 / 密度"]
  D["4. 检查<br/>可视化并比较"]
  E["5. 解释<br/>命名或使用该模式"]
  F["6. 下一步任务<br/>分析或监督学习"]

  A --> B
  B --> C
  C --> D
  D --> E
  E --> F

这张图里的关键,是 human interpretation。无监督学习得到的是数据中的结构候选。model 做出的分组或轴,仍然需要由人来命名、解释,并确认它是否在实际工作里可用。

在无监督学习里最常见的三类问题

无监督学习有很多用法,但最重要的是先区分下面这三类问题。

问题 要问什么 简单例子
clustering 相似案例会不会分到一起? 把购买模式相近的客户分组
dimensionality reduction 很多 feature 能不能压缩成更少的轴? 把 100 个 feature 降成 2 维图
outlier detection 有没有特别不一样的案例? 找出不寻常的支付模式作为复核候选

scikit-learn 的无监督学习文档也会处理 clustering、manifold learning、matrix factorization、outlier detection、density estimation 等多种类别。本节会以 clustering、dimensionality reduction、outlier detection 为中心来讲。

clustering:把相似的东西放到一起

clustering 是把没有标签的数据,按相似性分成若干组的方法。

如果按访问次数和购买次数来看客户数据,可能会出现下面这样的分组。

候选分组 数据里看见的模式 人可能贴上的解释
组 A 访问多、购买也多 活跃客户
组 B 访问多但购买少 浏览型客户或比价客户
组 C 访问少、购买也少 休眠客户候选

但这些名字并不是 model 告诉你的,而是人看着数据后贴上的解释。clustering 的结果更像是 看起来这里有这样的分组 的出发点,而不是立刻断定 这个客户一定就是这种人

Google 对 clustering 的说明,也把它解释成 按 similarity 把没有标签的例子分成组。真正用起来时,还必须明确到底采用了什么相似标准,而且 feature 一多,比较方式也会变得更复杂。

这里尤其要小心,不要把 cluster ID 出来了 误读成 已经有了正确答案标签

看到的东西 它真正表示什么 它还不是什么
Cluster 0、1、2 model 暂时把相似案例分到一起的结果 现实里已经确认好的客户类型标签
2 维图里彼此很近的点 在某个表示空间里看起来接近 并不自动表示相同原因或同一业务群体
outlier candidate 它和大多数案例看起来不太一样 还不是已确认的错误或风险判断

也就是说,无监督学习的输出更接近 结构候选,而不是 答案。先把这一点接受下来,后面在看聚类或降维结果时,就不容易夸大它。

dimensionality reduction:把很多东西压缩到更少的轴上

dimensionality reduction 是把很多 feature 压缩成更少几个轴的方法。

例如,如果一个客户要由 50 个 feature 来描述,人就很难一眼看出来。降维可以把这些信息压成 2 个或 3 个轴,帮助可视化,也让主要变化方向更容易看见。

降维本身可能会丢掉一部分信息。所以,不能只因为两个点在 2 维图里看起来很近,就断定它们在原始数据里一定代表同样的意思。还必须确认哪些信息被保留了,哪些信息被压缩掉了。

outlier detection:把不同之处读成复核候选

outlier detection 是用来寻找那些看起来和大多数案例不一样的数据。

例如,在支付服务里,如果某次支付出现在异常时间、金额异常、地区也异常,那它就可能成为一个 outlier candidate。但 outlier 不等于欺诈,也可能是旅行中的正常消费,或者一次合法的大额购买。

因此,无监督学习的结果更适合先读成 复核候选。先去看 model 为什么把它标成异常,再把这个信号和真正的业务标准结合起来做判断。

解释结果时要小心的点

因为没有 label,所以在无监督学习里,结果解释会特别重要。

  • model 做出来的分组,不会自动变成有意义的现实群体。
  • 看起来接近的点,不一定就是因为同一个原因而接近。
  • 降维图不一定保留了原始数据的全部信息。
  • outlier candidate 不一定就是真正的错误、风险或欺诈。
  • 一旦开始给结果命名,就已经进入了人的解释。

所以,无监督学习更应该读成 我们找到了理解数据的结构候选,而不是 我们已经找到了正确答案

它可以怎样接到监督学习上

无监督学习并不是和监督学习完全分开的世界。在真实工作里,它们经常可以连起来。

例如,先把客户做 clustering,再分析每个 cluster 的行为,从而制定不同的营销策略;或者把 cluster ID 当成新的 feature,再送进监督学习 model;也可以先用降维做可视化,再检查是不是存在 label 错误。

即使这样,注意点也不变。无监督学习的结果可以成为下一步工作的材料,但它本身并不保证就是现实里的正确答案。

解释无监督学习结果时,可以按下面这个顺序。

  1. 先看数据里出现了哪些分组或哪些轴。
  2. 再看人能不能给这些分组贴上怎样的解释。
  3. 最后才决定这些结果是否要用于下一步分析或监督学习准备。

经过这个顺序,就能减少把无监督学习结果过早固定成 答案 的错误。

实际工作里,也常常要先判断:现在这个问题到底该不该按无监督学习来读。

当前状态 要不要按无监督学习来读 原因
没有 label,想先看分组、坐标轴或异常点 因为当前目标是理解结构,而不是预测答案
没有 label,但需要给下一步分析准备结构候选 因为 cluster、轴、outlier candidate 可以成为后续材料
已经有稳定 label,而且目标是给新案例匹配输出 通常不要 因为比起结构探索,更直接的是监督学习问题

案例与示例

案例 1. 当客户类型名称还没有,但想先看相似模式会不会自己显现出来时

假设某个网店已经收集了很多客户行为数据,但像 忠诚客户流失风险客户价格敏感客户 这样的类型 label 还没有。即便如此,人还是会很自然地想:能不能先看看数据里有没有一些分组自己显现出来?

在这个场景里,问题不是像监督学习那样去匹配正确 label,而是先只看访问次数、购买金额、优惠券使用等值,检查相似客户会不会聚成几组,或者有没有特别突出的客户。

所以,无监督学习会被解释成 在没有标签的数据里寻找结构候选的方法。model 不会直接告诉你 这一组就是 VIP,它只是先把一些值得人去解释的模式暴露出来。

可检查的结果,可以看它有没有真正形成下一步检查问题。比如,如果相似购买模式的客户确实分出了几个组,而且人能够解释它们之间的差别,那么无监督学习的结果就成了下一步分析的出发点。

flowchart TD
  A["客户行为表"]
  B["还没有标签"]
  C["寻找相似模式"]
  D["出现分组候选"]
  E["出现异常点或降维视图线索"]
  F["人工解释稍后再做"]
  G["把结果用于下一步分析问题"]

  A --> B --> C
  C --> D
  C --> E
  D --> F
  E --> F
  F --> G

Checklist

  • 能不能说明什么时候无监督学习的目标不是 把答案猜对,而是 做出结构候选
  • 能不能说明为什么 cluster ID、2 维图中的接近、outlier candidate 都不能立刻当成答案标签?
  • 能不能说明无监督学习结果怎样接到下一步分析或监督学习准备上?
  • 能不能说明无监督学习是在没有标签的数据里寻找结构候选的方法?
  • 能不能区分 clustering、dimensionality reduction、outlier detection 分别在显露什么结构候选?
  • 能不能说明无监督学习结果仍然需要人来解释,而且很难像监督学习那样直接和正确答案比较评估?

来源与参考资料