无监督学习入门:聚类、降维与异常检测
无监督学习从没有人工标签的数据中发现结构。常见任务包括聚类、降维和异常检测。它很适合探索数据,但算法找到的“模式”不一定等于真实业务类别,仍需结合领域知识验证。
示例于 2026-07-29 按当前 NumPy 和 scikit-learn API 复核。运行前可执行
python -m pip install numpy matplotlib scikit-learn。
1. 聚类
K-means
K-means 把样本分为预先指定的 k 组,使样本到所属簇中心的平方距离尽可能小。它对特征尺度和离群值敏感,使用前通常需要标准化。
1 | from sklearn.cluster import KMeans |
不要只根据图形挑选 k。可结合轮廓系数、稳定性和业务可解释性比较多个候选值。
DBSCAN
DBSCAN 依据局部密度形成簇,不要求预先指定簇数,并能把稀疏区域标记为噪声:
1 | from sklearn.cluster import DBSCAN |
eps 与距离尺度密切相关;高维数据中距离会变得不易区分,不能机械套用参数。
2. 降维
PCA
主成分分析(PCA)寻找解释数据方差最大的正交方向,适合压缩、去相关和可视化前的预处理:
1 | from sklearn.decomposition import PCA |
PCA 是线性方法,而且“方差大”不一定代表“业务重要”。
t-SNE
t-SNE 常用于把高维样本投影到二维观察局部邻域:
1 | from sklearn.manifold import TSNE |
t-SNE 图中的簇间距离和面积不能直接作定量解释。结果会受随机种子、困惑度和预处理影响;用于大数据集时,常先用 PCA 降到较低维度。
3. 异常检测
Isolation Forest 通过随机切分隔离样本,适合从多维数据中筛查异常候选:
1 | from sklearn.ensemble import IsolationForest |
contamination 表示预期异常比例,不应在未知数据上随意设定。异常检测结果适合触发复核,不应在缺乏评估时直接用于处罚、拒绝服务或其他高影响决策。
4. 如何评估
没有标签不代表无法评估:
- 比较不同初始化、抽样和时间窗口下的稳定性;
- 使用轮廓系数等内部指标,但不要把单一指标当最终答案;
- 检查各簇特征分布及业务含义;
- 保留一小部分人工复核或后验结果作外部验证;
- 先划分数据再拟合预处理器,避免验证信息泄漏。
如果目标是图像分类,可继续阅读 CNN 入门教程;那属于有标签的监督学习场景。