无监督学习
无监督学习是机器学习的重要分支,其核心特征是训练数据没有标签。模型需要自行发现数据中的结构、模式和规律。
无监督学习概述
与监督学习的对比
| 维度 | 监督学习 | 无监督学习 |
|---|---|---|
| 标签 | 需要标注数据 | 不需要标签 |
| 目标 | 学习输入到输出的映射 | 发现数据的内在结构 |
| 评估 | 有明确的评估指标 | 评估较困难,常需人工判断 |
| 典型任务 | 分类、回归 | 聚类、降维、异常检测、密度估计 |
| 数据成本 | 标注成本高 | 数据获取成本低 |
应用场景
- 客户分群:根据购买行为将客户划分为不同群体
- 异常检测:信用卡欺诈检测、网络入侵检测
- 数据可视化:高维数据的低维可视化
- 特征学习:自编码器学习数据表征
- 推荐系统:发现用户或物品的潜在相似性
聚类算法
聚类是无监督学习中最基本的任务之一,目标是将数据点划分为若干组(簇),使得同一组内的数据点尽可能相似,不同组的数据点尽可能不同。
K-Means 算法
K-Means 是最经典的聚类算法,思想简洁,实现高效。
算法步骤:
- 随机初始化 \(K\) 个聚类中心 \(\boldsymbol{\mu}_1, \boldsymbol{\mu}_2, \dots, \boldsymbol{\mu}_K\)
- 分配步骤(E-step):将每个数据点 \(\mathbf{x}_i\) 分配到最近的聚类中心:
- 更新步骤(M-step):重新计算每个簇的中心:
- 重复步骤 2-3,直到收敛(中心不再变化或变化量低于阈值)。
目标函数(SSE / Inertia):
K-Means 本质上是在最小化组内平方和(Within-Cluster Sum of Squares, WCSS)。
K 值选择:
- 肘部法则(Elbow Method):绘制 \(K\) 与 SSE 的关系图,选择 SSE 下降速度明显减缓的"肘部"点。
- 轮廓系数(Silhouette Score):对每个样本 \(i\),定义:
其中 \(a(i)\) 是样本到同簇其他点的平均距离,\(b(i)\) 是样本到最近其他簇的平均距离。\(s(i) \in [-1, 1]\),越接近 1 越好。
K-Means 的局限性:
- 需要预先指定 \(K\)
- 对初始化敏感(K-Means++ 可缓解)
- 只能发现凸形(球形)簇
- 对异常值敏感
DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,能发现任意形状的簇,并自动识别噪声点。
核心概念:
- \(\varepsilon\)-邻域:以点 \(p\) 为中心、半径为 \(\varepsilon\) 的区域内的所有点
- 核心点:\(\varepsilon\)-邻域中至少包含 \(\text{MinPts}\) 个点的点
- 密度直达:点 \(q\) 在核心点 \(p\) 的 \(\varepsilon\)-邻域内,则 \(q\) 由 \(p\) 密度直达
- 密度可达:存在一条核心点链,使得相邻点密度直达
- 密度相连:存在一个核心点 \(o\),使得 \(p\) 和 \(q\) 都由 \(o\) 密度可达
参数选择:
- \(\varepsilon\):通常通过 K-距离图(K-distance plot)来选择,对第 \(k\) 近邻距离排序后找拐点
- MinPts:经验法则通常取 \(\text{MinPts} \geq d + 1\)(\(d\) 为数据维度),常用值为 5
优势:无需指定簇数、能发现任意形状的簇、能识别噪声点。
劣势:对参数敏感、难以处理密度不均匀的数据。
层次聚类
层次聚类构建一棵聚类树(dendrogram),可以从底向上合并(凝聚式)或从顶向下分裂(分裂式)。
凝聚式层次聚类步骤:
- 初始时每个样本为一个簇
- 计算所有簇对之间的距离
- 合并距离最近的两个簇
- 重复直到只剩一个簇
常用链接准则:
| 链接方法 | 定义 | 特点 |
|---|---|---|
| 单链接(Single) | \(d(A,B) = \min_{a \in A, b \in B} d(a,b)\) | 易产生链式效应 |
| 全链接(Complete) | \(d(A,B) = \max_{a \in A, b \in B} d(a,b)\) | 倾向于紧凑的簇 |
| 平均链接(Average) | $d(A,B) = \frac{1}{ | A |
| Ward 链接 | 合并后组内方差增量最小 | 倾向于等大小的簇 |
高斯混合模型(GMM)
GMM 假设数据由 \(K\) 个高斯分布混合生成:
其中 \(\pi_k\) 为混合权重,满足 \(\sum_k \pi_k = 1\)。
EM 算法求解:
E-step:计算每个样本属于各高斯成分的后验概率(责任):
M-step:更新参数:
GMM 相比 K-Means 的优势:可以建模椭球形簇、提供概率化的软分配。
谱聚类
谱聚类利用数据的相似度图的拉普拉斯矩阵的谱(特征值)来进行聚类。
算法步骤:
- 构建相似度矩阵 \(\mathbf{W}\)(如高斯核 \(w_{ij} = \exp(-\|\mathbf{x}_i - \mathbf{x}_j\|^2 / 2\sigma^2)\))
- 计算度矩阵 \(\mathbf{D}\),其中 \(D_{ii} = \sum_j w_{ij}\)
- 计算归一化拉普拉斯矩阵 \(\mathbf{L}_{\text{sym}} = \mathbf{I} - \mathbf{D}^{-1/2}\mathbf{W}\mathbf{D}^{-1/2}\)
- 取 \(\mathbf{L}_{\text{sym}}\) 最小的 \(K\) 个特征向量,组成矩阵 \(\mathbf{U} \in \mathbb{R}^{n \times K}\)
- 对 \(\mathbf{U}\) 的行向量进行 K-Means 聚类
谱聚类能发现非凸形的簇,适用于流形结构的数据。
降维
降维旨在将高维数据映射到低维空间,同时尽可能保留数据的重要结构信息。
PCA(主成分分析)
PCA 寻找数据方差最大的方向,将数据投影到这些方向上。
数学推导:
给定数据矩阵 \(\mathbf{X} \in \mathbb{R}^{n \times d}\)(已中心化),计算协方差矩阵:
对 \(\mathbf{C}\) 进行特征值分解:
按特征值 \(\lambda_1 \geq \lambda_2 \geq \dots \geq \lambda_d\) 降序排列,取前 \(K\) 个特征向量作为投影方向。
方差解释比(Explained Variance Ratio):
通常选择使累计方差解释比达到 95% 的维度数。
t-SNE
t-SNE(t-distributed Stochastic Neighbor Embedding)是一种非线性降维方法,特别适合高维数据的可视化。
核心思想:
- 在高维空间中,用高斯核计算点对的相似度:
对称化:\(p_{ij} = \frac{p_{j|i} + p_{i|j}}{2n}\)
- 在低维空间中,用 Student-t 分布(自由度为1)计算相似度:
- 最小化 KL 散度:\(\text{KL}(P \| Q) = \sum_{i \neq j} p_{ij} \log \frac{p_{ij}}{q_{ij}}\)
困惑度(Perplexity):控制高斯核带宽 \(\sigma_i\),通常取 5-50。困惑度越大,关注的邻域越广。
注意事项: t-SNE 不保留全局结构,不同运行结果可能不同,不适合作为预处理步骤。
UMAP
UMAP(Uniform Manifold Approximation and Projection)基于拓扑数据分析和黎曼几何的理论。
核心思想:
- 假设数据均匀分布在一个黎曼流形上
- 在高维空间中构建模糊单纯复形(fuzzy simplicial set)来表示拓扑结构
- 在低维空间中寻找尽可能保留该拓扑结构的嵌入
UMAP vs t-SNE 对比:
| 维度 | t-SNE | UMAP |
|---|---|---|
| 速度 | 慢(\(O(n^2)\) 或 Barnes-Hut \(O(n \log n)\)) | 快(基于近似最近邻) |
| 全局结构 | 不保留 | 更好地保留 |
| 可扩展性 | 数万点 | 可处理百万级数据 |
| 理论基础 | 概率分布匹配 | 拓扑/范畴论 |
| 用途 | 仅可视化 | 可视化 + 通用降维 |
异常检测
异常检测的目标是识别与大多数数据显著不同的"异常"样本。
Isolation Forest
核心思想:异常点比正常点更容易被"隔离"(即需要更少的随机切分次数)。
- 随机选择特征和分裂值,构建隔离树(iTree)
- 异常分数基于样本在所有树中的平均路径长度:
其中 \(h(\mathbf{x})\) 为路径长度,\(c(n)\) 为归一化因子。\(s\) 接近 1 表示异常,接近 0.5 表示正常。
LOF(Local Outlier Factor)
LOF 通过比较样本的局部密度与其邻居的局部密度来检测异常:
LOF 大于 1 表示该点密度低于其邻域,可能是异常点。
One-Class SVM
One-Class SVM 在特征空间中找到一个超平面,将大部分数据与原点分开:
参数 \(\nu\) 控制异常比例的上界。
各方法综合对比
| 方法 | 类型 | 适用场景 | 复杂度 | 关键参数 |
|---|---|---|---|---|
| K-Means | 聚类 | 凸形簇、大数据集 | \(O(nKt)\) | \(K\) |
| DBSCAN | 聚类 | 任意形状、有噪声 | \(O(n \log n)\) | \(\varepsilon\), MinPts |
| GMM | 聚类 | 椭球形簇、软分配 | \(O(nK d^2)\) | \(K\), 协方差类型 |
| 谱聚类 | 聚类 | 非凸流形结构 | \(O(n^3)\) | \(K\), \(\sigma\) |
| PCA | 降维 | 线性降维、去相关 | \(O(nd^2)\) | 主成分数 |
| t-SNE | 降维 | 高维数据可视化 | \(O(n^2)\) | 困惑度 |
| UMAP | 降维 | 可视化 + 通用降维 | \(O(n^{1.14})\) | n_neighbors, min_dist |
| Isolation Forest | 异常检测 | 高维异常检测 | \(O(n \log n)\) | 树数量、采样大小 |
| LOF | 异常检测 | 局部异常检测 | \(O(n^2)\) | \(k\)(邻居数) |
| One-Class SVM | 异常检测 | 小数据、高维 | \(O(n^2) \sim O(n^3)\) | \(\nu\), 核函数 |