无监督学习入门:聚类、降维与异常检测

Chen Xi
Chen Xi

无监督学习从没有人工标签的数据中发现结构。常见任务包括聚类、降维和异常检测。它很适合探索数据,但算法找到的“模式”不一定等于真实业务类别,仍需结合领域知识验证。

示例于 2026-07-29 按当前 NumPy 和 scikit-learn API 复核。运行前可执行 python -m pip install numpy matplotlib scikit-learn

1. 聚类

K-means

K-means 把样本分为预先指定的 k 组,使样本到所属簇中心的平方距离尽可能小。它对特征尺度和离群值敏感,使用前通常需要标准化。

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, _ = make_blobs(n_samples=500, centers=4, random_state=42)

model = make_pipeline(
StandardScaler(),
KMeans(n_clusters=4, n_init="auto", random_state=42),
)
labels = model.fit_predict(X)
print(labels[:10])

不要只根据图形挑选 k。可结合轮廓系数、稳定性和业务可解释性比较多个候选值。

DBSCAN

DBSCAN 依据局部密度形成簇,不要求预先指定簇数,并能把稀疏区域标记为噪声:

1
2
3
4
5
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

X_scaled = StandardScaler().fit_transform(X)
labels = DBSCAN(eps=0.3, min_samples=5).fit_predict(X_scaled)

eps 与距离尺度密切相关;高维数据中距离会变得不易区分,不能机械套用参数。

2. 降维

PCA

主成分分析(PCA)寻找解释数据方差最大的正交方向,适合压缩、去相关和可视化前的预处理:

1
2
3
4
5
6
7
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

X_scaled = StandardScaler().fit_transform(X)
pca = PCA(n_components=2)
X_2d = pca.fit_transform(X_scaled)
print(pca.explained_variance_ratio_)

PCA 是线性方法,而且“方差大”不一定代表“业务重要”。

t-SNE

t-SNE 常用于把高维样本投影到二维观察局部邻域:

1
2
3
4
5
6
7
8
from sklearn.manifold import TSNE

embedding = TSNE(
n_components=2,
init="pca",
learning_rate="auto",
random_state=42,
).fit_transform(X_scaled)

t-SNE 图中的簇间距离和面积不能直接作定量解释。结果会受随机种子、困惑度和预处理影响;用于大数据集时,常先用 PCA 降到较低维度。

3. 异常检测

Isolation Forest 通过随机切分隔离样本,适合从多维数据中筛查异常候选:

1
2
3
4
5
6
7
8
9
from sklearn.ensemble import IsolationForest

detector = IsolationForest(
contamination=0.02,
random_state=42,
)
prediction = detector.fit_predict(X_scaled)
anomaly_mask = prediction == -1
print(anomaly_mask.sum())

contamination 表示预期异常比例,不应在未知数据上随意设定。异常检测结果适合触发复核,不应在缺乏评估时直接用于处罚、拒绝服务或其他高影响决策。

4. 如何评估

没有标签不代表无法评估:

  • 比较不同初始化、抽样和时间窗口下的稳定性;
  • 使用轮廓系数等内部指标,但不要把单一指标当最终答案;
  • 检查各簇特征分布及业务含义;
  • 保留一小部分人工复核或后验结果作外部验证;
  • 先划分数据再拟合预处理器,避免验证信息泄漏。

如果目标是图像分类,可继续阅读 CNN 入门教程;那属于有标签的监督学习场景。

参考资料