外观
无监督学习
概念定义:没有标准答案的学习
监督学习靠"带标签的 (x, y)"学习,无监督学习(unsupervised learning)面对的是只有输入 x、没有标签 y 的数据。目标不是预测某个答案,而是发现数据内在的结构:哪些样本相似?数据本质是几类?哪些维度重要?哪些点是异常的?
一句话总结四大任务:
- 聚类(Clustering):把相似的样本自动分组;
- 降维(Dimensionality Reduction):把高维数据压缩到低维,保留主要结构;
- 异常检测(Anomaly Detection):找出与大多数样本显著不同的点;
- 关联规则(Association):发现特征/物品之间的共现规律。
无监督的价值在真实业务中常常被低估:现实里标签是稀缺且昂贵的(标注要钱要人),而无监督能直接从未标注的海量数据里提取价值——客户分群、数据压缩、欺诈识别、特征学习。深度学习时代,无监督的"表征学习"(预训练)甚至成了大模型的核心,见生成式模型与大语言模型。
二、聚类:给数据分组
代表算法
| 算法 | 核心思想 | 特点 |
|---|---|---|
| K-Means | 迭代:分配样本到最近质心 → 更新质心 | 快、简单、必须指定 K、对异常值/非球形分布敏感 |
| DBSCAN | 密度相连的样本成簇 | 不用指定 K、能找任意形状、自动识别噪声点 |
| 层次聚类(Agglomerative) | 自底向上合并最近簇,生成树状图 | 可视化友好、可看任意粒度 |
| GMM(高斯混合) | 假设数据是 K 个高斯分布的混合 | 软聚类(给概率)、能建模椭圆簇 |
K-Means 的完整流程
text
① 选 K 个初始质心
② 循环直到收敛:
a. 每个样本分配到最近质心(距离常用欧氏距离)
b. 每个簇的质心 = 簇内样本均值python
from sklearn.cluster import KMeans
import numpy as np
X = np.random.default_rng(0).normal(size=(500, 2)) # 500 个二维样本
kmeans = KMeans(n_clusters=3, n_init=10, random_state=42)
labels = kmeans.fit_predict(X)
print(f"质心: {kmeans.cluster_centers_}")K 怎么选?
- 肘部法(Elbow):画"簇内平方和(inertia)随 K"的曲线,找拐点;
- 轮廓系数(Silhouette Score):衡量"簇内紧凑 + 簇间分离",取最高 K;
- 业务驱动:客户分群 K=5 还是 K=8,最终看分出的群业务上是否有意义、可解释。
聚类的评估困境
聚类没有"标准答案",评估天然两难:内部指标(轮廓系数、inertia)只看结构,不保证业务有意义;外部指标(ARI、NMI)需要真实标签——但真实标签存在时,你通常直接用监督学习了。实践建议:以业务可解释性为准,内部指标只作参考。
三、降维:压缩数据,保住结构
高维数据的三个问题:计算贵、可视化不可能、维度灾难(高维空间里样本越来越"稀疏",距离概念失效)。降维把数据映射到低维空间,分两类:
线性降维
PCA(主成分分析):找方差最大的正交方向(主成分),把数据投影上去。原理:第一主成分方向 = 数据方差最大的方向。PCA 的用途:
- 可视化(降到 2D/3D);
- 去噪(丢弃方差小的成分);
- 压缩特征(防过拟合);
- 白化/预处理(与缩放配合)。
python
from sklearn.decomposition import PCA
pca = PCA(n_components=2) # 降到 2 维
X_2d = pca.fit_transform(X)
print(f"两个主成分解释方差比: {pca.explained_variance_ratio_}")选成分数:看"累计解释方差比"曲线,取达到 80%~95% 的成分数。
非线性降维
| 算法 | 核心思想 | 特点 |
|---|---|---|
| t-SNE | 保持高维邻域关系,用 t 分布低维投影 | 可视化效果好,但不保全局结构、结果随机、不可逆 |
| UMAP | 流形学习 + 拓扑思想 | 比 t-SNE 快、更保全局结构,近年可视化首选 |
| Autoencoder | 神经网络:压缩到瓶颈再还原 | 非线性表征学习,可微、可继续训练 |
降维的三个误用
- PCA 前必须标准化(否则量纲大的特征主导主成分);
- t-SNE 的距离不可信——它只保邻域相对关系,图上"远"不代表真实远;
- 降维用于可视化 ≠ 用于建模:把 X 降到 2 维再训练分类器,通常丢信息;建模前降维要用 PCA/autoencoder 而非 t-SNE。
四、异常检测:找"不一样"的点
业务场景:欺诈检测、工业质检、网络入侵、数据清洗。
| 方法 | 思想 | 特点 |
|---|---|---|
| 统计法(Z-score / IQR) | 偏离均值/分位数的点是异常 | 快、可解释,仅适合单维/简单分布 |
| 隔离森林(Isolation Forest) | 随机切分,异常点容易被"孤立"(路径短) | 高效、抗高维,表格异常检测首选 |
| LOF(局部离群因子) | 比较样本与其邻居的密度 | 能发现局部异常 |
| One-Class SVM | 学习"正常样本"的边界 | 高维有效,调参敏感 |
| 自编码器重建误差 | 正常样本重建误差小,异常误差大 | 深度学习场景 |
异常检测的本质是"分布外"问题:正常数据占绝大多数,模型只需描述"正常长什么样",偏离太多的就是异常——这与[无监督聚类]的"主类结构"思想同源。
五、关联规则:购物篮分析
Apriori(1994):从交易数据里发现"买了 A 也常买 B"的规则。三个指标:
- 支持度:规则覆盖的比例(P(A∩B));
- 置信度:A 出现时 B 出现的条件概率;
- 提升度:P(B|A)/P(B),>1 表示正相关。
经典案例:沃尔玛"啤酒与尿布"(实际是数据挖掘教材的著名例子)。应用:捆绑销售、货架摆放、交叉推荐。今天在大规模场景已被协同过滤和 embedding 推荐取代,但规则可解释性至今是营销活动设计的实用工具(见推荐系统)。
六、无监督学习的落地姿势
无监督很少"单独交付",更多作为管道的上游组件:
无监督的四种落地方式
├── 前置:聚类分群 → 按群分别建模(客户分群后各建流失模型)
├── 特征:降维/自编码器 → 给下游监督模型当特征
├── 引擎:表征预训练 → 微调(BERT、CLIP 都是无监督预训练)
└── 兜底:异常检测 → 数据清洗、欺诈告警(无标签也能上线)这解释了为什么无监督是"便宜但有用":它不依赖昂贵标注,但产出(分组、表征、异常)能被监督学习或业务直接消费。
无监督 vs 自监督 vs 弱监督
- 无监督:只用 x,无任何标签;
- 自监督(self-supervised):从 x 自身构造伪标签(预测句子中被遮的词、预测图像旋转角度)——本质是"无监督地造出监督信号",是 BERT/GPT 预训练的核心;
- 弱监督:用不精确/不完整的标签(远程监督、规则打标)。 大模型时代"无监督"的高光时刻其实是自监督——详见生成式模型。
七、权衡与取舍
- K-Means vs DBSCAN:数据球形、知道 K → K-Means;形状任意、要自动去噪 → DBSCAN。
- PCA vs t-SNE/UMAP:要可解释、可逆、保方差 → PCA;只要可视化 → UMAP/t-SNE。
- 聚类 vs 降维:聚类给"分组",降维给"坐标";二者常组合(先降维再聚类提速/可视化)。
- 自动化 vs 可解释:无监督的"正确答案"由人定义——每个聚类结果都必须回到业务验证意义,否则就是"看起来分了组"。
延伸阅读
参考资料
- scikit-learn: Clustering / Dimensionality reduction 文档
- MacQueen. Some methods for classification and analysis of multivariate observations(K-Means, 1967)
- Ester et al. A density-based algorithm for discovering clusters(DBSCAN, KDD 1996)
- Pearson. On lines and planes of closest fit(PCA, 1901)
- van der Maaten & Hinton. Visualizing Data using t-SNE(JMLR, 2008)
- Agrawal & Srikant. Fast Algorithms for Mining Association Rules(Apriori, VLDB 1994)
- Liu, Ting, Zhou. Isolation Forest(ICDM 2008)