降维是图像学中将图像高维数据转化为低维特征向量的技术,其核心是通过提取流形本征结构降低计算复杂度并提升识别精度。本文介绍几种降维方法。

PCA

PCA是一种线性正交变换,将数据投影到方差最大的正交方向上。其核心思想是:找到一组正交基,使得数据在这些基上构成的子空间的投影具有最大方差。

数学过程

假设数据集包含N个样本,每个样本有D个特征。即 X = [ x 1 , . . . , x N ] T , x i ∈ R D , X ∈ R N × D X=[x_1,...,x_N]^T,x_i\in\mathbb{R}^D,X\in\mathbb{R}^{N\times D} X=[x1,...,xN]T,xiRD,XRN×D

目标是降维到K维,即 Y = [ y 1 , . . . , y N ] T , y i ∈ R K , Y ∈ R N × K Y=[y_1,...,y_N]^T,y_i\in\mathbb{R}^K,Y\in\mathbb{R}^{N\times K} Y=[y1,...,yN]T,yiRK,YRN×K

  1. 数据中心化

    首先计算数据均值 μ = 1 N ∑ i = 1 N x i \mu=\frac{1}{N}\sum_{i=1}^Nx_i μ=N1i=1Nxi,每个样本的特征减去该样本的均值,即 X ˉ = X − I N μ \bar{X}=X-\mathbb{I}_{N}\mu Xˉ=XINμ

  2. 计算协方差矩阵

    C = 1 N − 1 X ˉ T X ˉ C=\frac{1}{N-1}\bar{X}^T\bar{X} C=N11XˉTXˉ,其中 C ∈ R D × D C\in\mathbb{R}^{D\times D} CRD×D为协方差矩阵。

  3. 最大化方差

    假设将 x ˉ i \bar{x}_i xˉi投影在基为 w = w 1 , . . . , w K w={w_1,...,w_K} w=w1,...,wK上的子空间, w k ∈ R D , ∥ w ∥ = 1 w_k\in\mathbb{R}^D,\|w\|=1 wkRD,w=1,即 z i = w T x ˉ i z_i=w^T\bar{x}_i zi=wTxˉi。则方差
    V a r ( z i ) = 1 N − 1 ∑ i = 1 N z i 2 = 1 N − 1 ∑ i = 1 N ( w T x ˉ i ) 2 = w T C w Var(z_i)=\frac{1}{N-1}\sum_{i=1}^N z_i^2=\frac{1}{N-1}\sum_{i=1}^N(w^T\bar{x}_i)^2=w^TCw Var(zi)=N11i=1Nzi2=N11i=1N(wTxˉi)2=wTCw
    从而要最大化方差,只需要求解约束问题
    max ⁡ w w T C w s . t . w T w = 1 \max_w w^TCw \qquad s.t. w^Tw=1 wmaxwTCws.t.wTw=1
    利用拉格朗日乘子法,则有拉格朗日函数
    L ( w , λ ) = w T C w − λ ( w T w − 1 ) L(w,\lambda)=w^TCw-\lambda(w^Tw-1) L(w,λ)=wTCwλ(wTw1)
    w w w求导
    ∂ L ( w , λ ) ∂ w = 2 C w − 2 λ w = 0 \frac{\partial L(w,\lambda)}{\partial w}=2Cw-2\lambda w=0 wL(w,λ)=2Cw2λw=0
    从而有 w w w C C C的特征向量, λ \lambda λ C C C的特征值。故 max ⁡ w w T C w = max ⁡ w λ w T w \max_w w^TCw=\max_w \lambda w^T w maxwwTCw=maxwλwTw,这说明 w w w C C C中最大K个特征值对应的特征向量。

  4. 特征值分解并投影

    C C C进行特征值分解,即 C = V Λ V T C=V\Lambda V^T C=VΛVT,其中 V V V C C C的特征向量组成的矩阵, Λ \Lambda Λ C C C的特征值组成的对角矩阵。则 C C C的最大K个特征值对应的特征向量为 V V V的前K列 V K = [ v 1 , . . . , v K ] V_K=[v_1,...,v_K] VK=[v1,...,vK]

    从而 y i = V K T x ˉ i y_i=V_K^T\bar{x}_i yi=VKTxˉi,即 Y = X ˉ V K Y=\bar{X}V_K Y=XˉVK

MNIST数据集

在MNIST数据集中,每个样本为28x28的灰度图像,共784个特征。现在我们将其降到2维。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler

# 加载MNIST数据集
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X, y = mnist.data, mnist.target.astype(int)

# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 应用PCA降维到2D
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

# 绘制2D散点图
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10', s=5)
plt.colorbar(scatter, ticks=range(10))
plt.title('PCA of MNIST Dataset')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.show()

在这里插入图片描述
可以看到没有很好的分开不同的数字

t-SNE

t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非线性降维算法,主要用于高维数据的可视化。它由 Laurens van der Maaten 和 Geoffrey Hinton 在 2008 年提出,特别适合将高维数据(如图像、文本、基因数据等)映射到二维或三维空间,以便人类直观地观察数据的结构和聚类情况。

数学过程

假设数据集包含N个样本,每个样本有D个特征。即 X = [ x 1 , . . . , x N ] T , x i ∈ R D , X ∈ R N × D X=[x_1,...,x_N]^T,x_i\in\mathbb{R}^D,X\in\mathbb{R}^{N\times D} X=[x1,...,xN]T,xiRD,XRN×D

目标是降维到K维,即 Y = [ y 1 , . . . , y N ] T , y i ∈ R K , Y ∈ R N × K Y=[y_1,...,y_N]^T,y_i\in\mathbb{R}^K,Y\in\mathbb{R}^{N\times K} Y=[y1,...,yN]T,yiRK,YRN×K

高维空间相似度计算(P矩阵构建)

  1. 条件概率 p j ∣ i p_{j|i} pji

t-SNE首先在高维空间中计算相似度。对于每个点 x i x_i xi,定义以 x i x_i xi为中心的高斯分布,计算 x j x_j xj出现在 x i x_i xi附近的条件概率:

p j ∣ i = exp ⁡ ( − ∥ x i − x j ∥ 2 / 2 σ i 2 ) ∑ k ≠ i exp ⁡ ( − ∥ x i − x k ∥ 2 / 2 σ i 2 ) p_{j|i} = \frac{\exp(-\|x_i - x_j\|^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-\|x_i - x_k\|^2 / 2\sigma_i^2)} pji=k=iexp(xixk2/2σi2)exp(xixj2/2σi2)

其中:

  • ∥ x i − x j ∥ 2 \|x_i - x_j\|^2 xixj2是欧氏距离的平方
  • σ i \sigma_i σi是高斯分布的标准差,对每个点 x i x_i xi单独确定
  1. 对称化概率 p i j p_{ij} pij

原始SNE使用有向的条件概率,但t-SNE将其对称化,定义联合概率:

p i j = p j ∣ i + p i ∣ j 2 N p_{ij} = \frac{p_{j|i} + p_{i|j}}{2N} pij=2Npji+pij

这样, p i j = p j i p_{ij} = p_{ji} pij=pji,且 ∑ i ≠ j p i j = 1 \sum_{i \neq j} p_{ij} = 1 i=jpij=1。对称化有助于减少计算复杂度并提高稳定性。

  1. 困惑度(Perplexity)与 σ i \sigma_i σi的确定

困惑度定义为:

P e r p ( P i ) = 2 H ( P i ) Perp(P_i) = 2^{H(P_i)} Perp(Pi)=2H(Pi)

其中 H ( P i ) = − ∑ j p j ∣ i log ⁡ 2 p j ∣ i H(P_i) = -\sum_j p_{j|i} \log_2 p_{j|i} H(Pi)=jpjilog2pji是概率分布 P i P_i Pi的香农熵。

困惑度实际上衡量了有效邻域大小,值越大表示考虑更多邻居。t-SNE通过二分搜索为每个点 x i x_i xi找到合适的 σ i \sigma_i σi,使得 P e r p ( P i ) Perp(P_i) Perp(Pi)等于用户指定的困惑度值。

低维空间相似度计算(Q矩阵构建)

在低维空间中,t-SNE使用自由度为1的t分布(即Cauchy分布)而非高斯分布来计算相似度:

q i j = ( 1 + ∥ y i − y j ∥ 2 ) − 1 ∑ k ≠ l ( 1 + ∥ y k − y l ∥ 2 ) − 1 q_{ij} = \frac{(1 + \|y_i - y_j\|^2)^{-1}}{\sum_{k \neq l} (1 + \|y_k - y_l\|^2)^{-1}} qij=k=l(1+ykyl2)1(1+yiyj2)1

这里的关键区别:

  • 分子使用 ( 1 + ∥ y i − y j ∥ 2 ) − 1 (1 + \|y_i - y_j\|^2)^{-1} (1+yiyj2)1而非高斯分布
  • 分母是所有点对的相似度之和

使用t分布(长尾分布)的主要原因是解决"拥挤问题"(crowding problem)——高维空间中距离适中的点在低维表示中往往过于拥挤。t分布的长尾特性使远距离点在低维空间中可以相距更远。

目标函数:KL散度最小化

t-SNE的目标是找到低维表示 Y Y Y,使 P P P Q Q Q尽可能相似。使用KL散度作为衡量标准:

C = K L ( P ∣ ∣ Q ) = ∑ i ≠ j p i j log ⁡ p i j q i j C = KL(P||Q) = \sum_{i \neq j} p_{ij} \log \frac{p_{ij}}{q_{ij}} C=KL(P∣∣Q)=i=jpijlogqijpij

KL散度是非对称的,对 P P P中大的 p i j p_{ij} pij值赋予更高权重。这意味着t-SNE更关注保留数据的局部结构(即相似点之间的关系),而对远距离点的精确表示要求较低。

为了最小化KL散度,我们需要计算其关于低维表示 y i y_i yi的梯度。这是t-SNE优化的核心。

  1. KL散度重写

首先,将KL散度重写为:

C = ∑ i ≠ j p i j log ⁡ p i j − ∑ i ≠ j p i j log ⁡ q i j C = \sum_{i \neq j} p_{ij} \log p_{ij} - \sum_{i \neq j} p_{ij} \log q_{ij} C=i=jpijlogpiji=jpijlogqij

由于第一项与 Y Y Y无关,优化问题简化为最大化 ∑ i ≠ j p i j log ⁡ q i j \sum_{i \neq j} p_{ij} \log q_{ij} i=jpijlogqij

  1. 梯度计算

y i y_i yi求偏导:

∂ C ∂ y i = 4 ∑ j ( p i j − q i j ) ( y i − y j ) ( 1 + ∥ y i − y j ∥ 2 ) − 1 \frac{\partial C}{\partial y_i} = 4 \sum_j (p_{ij} - q_{ij}) (y_i - y_j) (1 + \|y_i - y_j\|^2)^{-1} yiC=4j(pijqij)(yiyj)(1+yiyj2)1

推导过程:SNE与t-SNE梯度的推导

随后使用梯度下降法最小化KL散度。

应用于MNIST数据集

在MNIST数据集中,每个样本为28x28的灰度图像,共784个特征。现在我们将其降到2维。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from sklearn.datasets import fetch_openml

# 加载MNIST数据集
mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X, y = mnist.data, mnist.target.astype(int)

# 应用t-SNE降维到2D
tsne = TSNE(n_components=2, perplexity=30, n_iter=1000, random_state=42)
X_tsne = tsne.fit_transform(X)

# 绘制2D散点图
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='tab10', s=5)
plt.colorbar(scatter, ticks=range(10))
plt.title('t-SNE of MNIST Dataset')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.show()

在这里插入图片描述
可以看到基本分开了各类数字。

UMAP

UMAP的核心思想是:数据位于高维空间中的低维流形上,且该流形具有均匀的黎曼度量。UMAP通过构建高维数据的模糊拓扑表示来捕捉这种结构。

数学过程

假设数据集包含N个样本,每个样本有D个特征。即 X = [ x 1 , . . . , x N ] T , x i ∈ R D , X ∈ R N × D X=[x_1,...,x_N]^T,x_i\in\mathbb{R}^D,X\in\mathbb{R}^{N\times D} X=[x1,...,xN]T,xiRD,XRN×D

目标是降维到K维,即 Y = [ y 1 , . . . , y N ] T , y i ∈ R K , Y ∈ R N × K Y=[y_1,...,y_N]^T,y_i\in\mathbb{R}^K,Y\in\mathbb{R}^{N\times K} Y=[y1,...,yN]T,yiRK,YRN×K

高维空间拓扑结构构建(模糊单纯复形)

  1. 局部距离缩放参数

对于每个点 x i x_i xi

  • 找到其 k k k个最近邻( k k kn_neighbors参数)
  • ρ i = min ⁡ { d ( x i , x j ) ∣ j ∈ N k ( i ) } \rho_i = \min\{d(x_i, x_j) | j \in \mathcal{N}_k(i)\} ρi=min{d(xi,xj)jNk(i)},即 x i x_i xi到其第 k k k个最近邻的距离
  • 确定局部距离缩放参数 σ i \sigma_i σi,使得:
    ∑ j ∈ N k ( i ) exp ⁡ ( − d ( x i , x j ) − ρ i σ i ) = log ⁡ 2 ( k + 1 ) \sum_{j \in \mathcal{N}_k(i)} \exp\left(-\frac{d(x_i, x_j) - \rho_i}{\sigma_i}\right) = \log_2(k+1) jNk(i)exp(σid(xi,xj)ρi)=log2(k+1)

这个方程确保了在 x i x_i xi周围的局部区域内,有大约 k k k个有意义的连接。 σ i \sigma_i σi通过数值方法(如二分法)求解。

  1. 高维模糊集相似度

在高维空间中,定义点 i i i j j j之间的模糊集相似度:
π i j = { exp ⁡ ( − d ( x i , x j ) − ρ i σ i ) if  d ( x i , x j ) ≥ ρ i 1 if  d ( x i , x j ) < ρ i \pi_{ij} = \begin{cases} \exp\left(-\frac{d(x_i, x_j) - \rho_i}{\sigma_i}\right) & \text{if } d(x_i, x_j) \geq \rho_i \\ 1 & \text{if } d(x_i, x_j) < \rho_i \end{cases} πij={exp(σid(xi,xj)ρi)1if d(xi,xj)ρiif d(xi,xj)<ρi

π i j \pi_{ij} πij表示在高维流形上,点 i i i j j j属于同一局部邻域的"可能性"。注意:

  • π i j ∈ [ 0 , 1 ] \pi_{ij} \in [0,1] πij[0,1]
  • π i j \pi_{ij} πij是非对称的( π i j ≠ π j i \pi_{ij} \neq \pi_{ji} πij=πji
  1. 对称化相似度

UMAP使用T-范数(T-norm)对相似度进行对称化,通常选择概率T-范数:
p i j = π i j + π j i − π i j ⋅ π j i p_{ij} = \pi_{ij} + \pi_{ji} - \pi_{ij} \cdot \pi_{ji} pij=πij+πjiπijπji

这等价于:
p i j = 1 − ( 1 − π i j ) ( 1 − π j i ) p_{ij} = 1 - (1 - \pi_{ij})(1 - \pi_{ji}) pij=1(1πij)(1πji)

对称化后的 p i j p_{ij} pij表示 i i i j j j在高维流形上连接的总体可能性,并设置 p i i = 0 p_{ii} = 0 pii=0(无自连接)

低维空间相似度计算

在低维空间中,UMAP使用连续的相似度函数来近似高维的模糊拓扑结构。

  1. 低维相似度函数

定义低维空间中点 i i i j j j的相似度:
μ i j = 1 1 + a ⋅ ∥ y i − y j ∥ 2 b \mu_{ij} = \frac{1}{1 + a \cdot \|y_i - y_j\|^{2b}} μij=1+ayiyj2b1

其中 a a a b b b是超参数,通过拟合以下方程确定:
∑ i ≠ j 1 1 + a ⋅ d i j 2 b = N 2 ⋅ min_dist − b \sum_{i \neq j} \frac{1}{1 + a \cdot d_{ij}^{2b}} = \frac{N}{2} \cdot \text{min\_dist}^{-b} i=j1+adij2b1=2Nmin_distb

这里:

  • d i j d_{ij} dij是低维空间中标准化的距离
  • min_dist是用户指定的参数,控制聚类的紧密度(通常0.001-0.5)
  1. 对称化低维相似度

与高维空间类似,定义低维空间的对称相似度:
q i j = μ i j + μ j i − μ i j ⋅ μ j i q_{ij} = \mu_{ij} + \mu_{ji} - \mu_{ij} \cdot \mu_{ji} qij=μij+μjiμijμji

但实际实现中,由于 μ i j \mu_{ij} μij已是对称函数( ∥ y i − y j ∥ = ∥ y j − y i ∥ \|y_i - y_j\| = \|y_j - y_i\| yiyj=yjyi),所以通常简化为:
q i j = 1 1 + a ⋅ ∥ y i − y j ∥ 2 b q_{ij} = \frac{1}{1 + a \cdot \|y_i - y_j\|^{2b}} qij=1+ayiyj2b1

目标函数:交叉熵最小化

UMAP的目标是找到低维表示 Y Y Y,使高维拓扑结构 p i j p_{ij} pij与低维拓扑结构 q i j q_{ij} qij尽可能匹配。与t-SNE使用KL散度不同,UMAP最小化交叉熵

C = ∑ i ≠ j [ p i j log ⁡ ( p i j q i j ) + ( 1 − p i j ) log ⁡ ( 1 − p i j 1 − q i j ) ] C = \sum_{i \neq j} \left[ p_{ij} \log\left(\frac{p_{ij}}{q_{ij}}\right) + (1-p_{ij}) \log\left(\frac{1-p_{ij}}{1-q_{ij}}\right) \right] C=i=j[pijlog(qijpij)+(1pij)log(1qij1pij)]

应用于MNIST数据集

在MNIST数据集中,每个样本为28x28的灰度图像,共784个特征。现在我们将其降到2维。

在这里插入图片描述

可以看到,UMAP方法对MNIST数据集划分的最好。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐