机器学习(V)--无监督学习(六)流形学习


title: 机器学习(V)–无监督学习(二)流形学习
date:
katex: true
categories:

  • Artificial Intelligence
  • Machine Learning
    tags:
  • 机器学习
    cover: /img/ML-unsupervised-learning.png
    top_img: /img/artificial-intelligence.jpg
    abbrlink: 26cd5aa6
    description:

流形学习

【降维技巧 | 导论与流形学习 | 中文字幕-哔哩哔哩】

流形学习(manifold learning)是一种借助拓扑流形概念的降维方法,流形是指在局部与欧式空间同胚的空间,即在局部与欧式空间具有相同的性质,能用欧氏距离计算样本之间的距离。这样即使高维空间的分布十分复杂,但是在局部上依然满足欧式空间的性质,基于流形学习的降维正是这种邻域保持的思想。

流形学习可以被认为是一种试图推广像PCA这样的线性框架,使其对数据中的非线性结构敏感。下面分别对几种著名的流行学习方法进行介绍。

给定样本矩阵

X = ( x 1 x 2 ⋯ x N ) = ( x 11 x 12 ⋯ x 1 N x 21 x 22 ⋯ x 2 N ⋮ ⋮ ⋱ ⋮ x p 1 x p 2 ⋯ x p N ) X=\begin{pmatrix}\mathbf x_1&\mathbf x_2&\cdots&\mathbf x_N\end{pmatrix}= \begin{pmatrix} x_{11}&x_{12}&\cdots&x_{1N} \\ x_{21}&x_{22}&\cdots&x_{2N} \\ \vdots&\vdots&\ddots&\vdots \\ x_{p1}&x_{p2}&\cdots&x_{pN} \\ \end{pmatrix} X=(x1x2xN)= x11x21xp1x12x22xp2x1Nx2NxpN
包含 N N N 个样本, p p p 个特征。其中,第 j j j 个样本的特征向量为 x j = ( x 1 j , x 2 j , ⋯ , x p j ) T \mathbf x_j=(x_{1j},x_{2j},\cdots,x_{pj})^T xj=(x1j,x2j,,xpj)T

多维缩放

多维缩放(Multi-dimensional Scaling, MDS)也被称作 PCoA (Principal Coordinate Analysis),是一种经典的降维算法,其原理是利用成对样本间的相似性,去构建合适的低维空间,这样才会使得原始空间样本之间的关系及总体分布不发生较大的改变。如果这个低维的空间是2维或者3维,则可以直观的可视化降维结果。

MDS 大致分为三类:

  • Classical MDS:经典 MDS 在低维空间使用欧式距离通过特征分解来寻找最优映射
  • Metric MDS:度量MDS在低维空间可以采用非欧式距离,使用迭代优化算法求解
  • Non-Metric MDS:度量MDS 在低维空间可以采用非度量距离,同样使用迭代优化算法求解

Classical MDS

假定 N N N个样本在原始空间中任意两两样本之间的距离矩阵为 D = ( δ i j ) N × N D=(\delta_{ij})_{N\times N} D=(δij)N×N ,其中元素 δ i j \delta_{ij} δij 表示原始空间第 i i i 个样本和第 j j j 个样本之间的距离。假设将样本映射到低维的 p ’ p’ p 维空间中
Z = ( z 1 z 2 ⋯ z N ) Z=\begin{pmatrix}\mathbf z_1&\mathbf z_2&\cdots&\mathbf z_N\end{pmatrix} Z=(z1z2zN)
元素 d i j d_{ij} dij 表示映射空间第 i i i 个样本和第 j j j 个样本之间的距离,原始的距离可以使用任何类型的距离矩阵,但低维近似通常表示欧式距离。我们在 MDS 中要实现的,就是对距离矩阵进行近似
δ i j ≈ d i j = ∥ z i − z j ∥ 2 \delta_{ij}\approx d_{ij}=\|\mathbf z_i-\mathbf z_j\|_2 δijdij=zizj2
注意到上述约束条件是没有唯一解的,因为平移或反转不改变欧式距离。因此我们并不直接求解降维结果 Z Z Z ,而是求解降维后样本的内积矩阵 S = Z T Z S=Z^TZ S=ZTZ,然后通过特征值分解的得到降维后的样本矩阵。

令元素 s i j = z i T z j s_{ij}=\mathbf z_i^T\mathbf z_j sij=ziTzj 表示映射空间第 i i i 个样本和第 j j j 个样本的内积。欧式距离对应于向量内积
δ i j 2 ≈ ∥ z i ∥ 2 + ∥ z j ∥ 2 − 2 z i T z j = s i i + s j j − 2 s i j \begin{aligned} \delta^2_{ij}&\approx \|\mathbf z_i\|^2+\|\mathbf z_j\|^2-2\mathbf z_i^T\mathbf z_j \\ &=s_{ii}+s_{jj}-2s_{ij} \end{aligned} δij2zi2+zj22ziTzj=sii+sjj2sij

为方便讨论,考虑降维后的数据样本中心化,即
∑ i = 1 N z i = 0 \sum_{i=1}^N\mathbf z_i=0 i=1Nzi=0

显然,内积矩阵的各行与各列之和均为0(因为总能提速到样本加和),于是可以得到方程组
δ i j 2 = s i i + s j j − 2 s i j ∑ i = 1 N δ i j 2 = tr ( S ) + N s j j ∑ j = 1 N δ i j 2 = tr ( S ) + N s i i ∑ i = 1 N ∑ j = 1 N δ i j 2 = 2 N tr ( S ) \delta^2_{ij}=s_{ii}+s_{jj}-2s_{ij}\\ \sum_{i=1}^N\delta^2_{ij}=\text{tr}(S)+Ns_{jj} \\ \sum_{j=1}^N\delta^2_{ij}=\text{tr}(S)+Ns_{ii} \\ \sum_{i=1}^N\sum_{j=1}^N\delta^2_{ij}=2N\text{tr}(S) δij2=sii+sjj2siji=1Nδij2=tr(S)+Nsjjj=1Nδij2=tr(S)+Nsiii=1Nj=1Nδij2=2Ntr(S)
最终求得
s i j = − 1 2 ( δ i j 2 − 1 N ∑ i = 1 N δ i j 2 − 1 N ∑ j = 1 N δ i j 2 − 1 N 2 ∑ i = 1 N ∑ j = 1 N δ i j 2 ) s_{ij}=-\frac{1}{2}\left(\delta^2_{ij}-\frac{1}{N}\sum_{i=1}^N\delta^2_{ij}-\frac{1}{N}\sum_{j=1}^N\delta^2_{ij}-\frac{1}{N^2} \sum_{i=1}^N\sum_{j=1}^N\delta^2_{ij}\right) sij=21(δij2N1i=1Nδij2N1j=1Nδij2N21i=1Nj=1Nδij2)

矩阵表达式为
S = − 1 2 C N D 2 C N S=-\frac{1}{2}C_ND^2C_N S=21CND2CN
其中 D 2 = ( δ i j 2 ) N × N D^2=(\delta_{ij}^2)_{N\times N} D2=(δij2)N×N 是距离元素逐个的平方矩阵。中心化矩阵
C N = I N − 1 N 1 N × N C_N=I_N-\frac{1}{N}1_{N\times N} CN=INN11N×N
其中 1 N × N 1_{N\times N} 1N×N 表示元素全为1的 N N N 阶方阵。

由于 S S S是正定实对称矩阵,只需对 S S S​ 进行特征值分解
S = V Λ V T S=V\Lambda V^T S=VΛVT

其中, Λ \Lambda Λ 是的特征值对角阵, V V V 是特征向量矩阵。为了降维,我们可以只保留前 p ′ p' p 个最大的特征值以及对应的特征向量,投影得到降维后的样本矩阵
Z = Λ V T Z=\sqrt \Lambda V^T Z=Λ VT
需要指出,这个解并不唯一。

具体来说,经典MDS算法的基本步骤如下:

Step 1 计算原始空间中每对数据点之间的距离来构建距离矩阵。

Step 2 通过距离矩阵,我们可以计算内积矩阵。

Step 3 对内积矩阵进行特征值分解。

Step 4 计算降维后的坐标。

Metric MDS

通常距离度量需满足以下基本性质:

  • 非负性: d ( x i , x j ) ≥ 0 d(x_i,x_j)\geq 0 d(xi,xj)0
  • 对称性: d ( x i , x j ) = d ( x j , x i ) d(x_i,x_j)=d(x_j,x_i) d(xi,xj)=d(xj,xi)
  • 三角不等式: d ( x i , x j ) ≤ d ( x i , x k ) + d ( x k , x j ) d(x_i,x_j)\leq d(x_i,x_k)+d(x_k,x_j) d(xi,xj)d(xi,xk)+d(xk,xj)

如果满足三角不等式,则为度量距离(Metric distance)。低维近似使用度量距离的MDS称为度量MDS(Metric MDS),它基于最小二乘损失函数,也被称为最小二乘MDS(least squares scaling)。

通常,Metric MDS 最小化称为 stress(Standardized Residual Sum of Squares) 的损失函数,来比较低维的距离和实际距离
S t r e s s = ∑ i < j ( d i j − δ i j ) 2 Stress=\sum_{i<j}(d_{ij}-\delta_{ij})^2 Stress=i<j(dijδij)2

最终采用某种优化过程(例如,梯度下降法)来最小化误差。

原始 stress 函数对距离的比例尺非常敏感,为了克服这个问题,引入了归一化
S t r e s s = ∑ i < j ( d i j − δ i j ) 2 ∑ i < j d i j 2 Stress=\sqrt{\frac{\sum_{i<j}(d_{ij}-\delta_{ij})^2}{\sum_{i<j}d_{ij}^2}} Stress=i<jdij2i<j(dijδij)2

然后,使用 SMACOF 来优化应力函数。在此,我们不讨论这些算法的细节。度量MDS典型的方法是以某种方式初始化低维空间的点(例如PCA),然后修正这些点,以降低应力。

  1. Initialization: Initialize points in random positions
  2. Compute distances: Obtain distance matrix for the configuration
  3. Calculate Loss: Evaluate stress function
  4. Optimize: Gradient descent to update minimize stress

Non-Metric MDS

许多距离很容易违反三角不等式,比如序数数据。非度量MDS(Non-Metric MDS)要实现的是对距离矩阵单调函数进行低维近似
d i j ≈ f ( δ i j ) d_{ij}\approx f(\delta_{ij}) dijf(δij)

其中 f f f 是一个单调函数,输出相同的顺序。损失函数
S t r e s s = ∑ i < j ( d i j − f ( δ i j ) ) 2 ∑ i < j d i j 2 Stress=\sqrt{\frac{\sum_{i<j}(d_{ij}-f(\delta_{ij}))^2}{\sum_{i<j}d_{ij}^2}} Stress=i<jdij2i<j(dijf(δij))2

等距特征映射

等距特征映射(isometric feature mapping, isomap)算法是最早的流形学习方法之一,核心思想是寻求一种更低维度的嵌入,以保持数据点之间的测地线距离(geodesic distance)。最终,对距离矩阵应用MDS,来得到低维映射。

任意两点的测地线距离则是利用流形在局部上与欧式空间同胚的性质,使用近邻欧式距离来逼近测地线距离。这样,高维空间中两个样本之间的距离就转为最短路径问题。可采用著名的Dijkstra算法Floyd算法计算最短距离。

Isomap的工作原理可以概括为以下几个步骤:

  1. 最近邻搜索:首先,为每个数据点找到其 k k k个最近邻,并在这些点之间构建一个邻接图。
  2. 最短路径图搜索:在邻接图中,计算所有点对之间的测地距离。这通常是通过Dijkstra算法或Floyd-Warshall算法来完成的。
  3. 构建距离矩阵:基于测地距离,构建一个距离矩阵,其中每个元素表示两个数据点之间的测地距离。
  4. 多维缩放(MDS):使用MDS 技术将距离矩阵转换为低维空间中的点的坐标。

局部线性嵌入

LLE

局部线性嵌入(Local linear embedding, LLE)不同与 ISOMAP 考虑全局连接信息,LLE试图在降维前后保持邻域内样本之间的线性关系。

假定原始空间样本 x i \mathbf x_i xi可以通过它的邻域样本集 N ( i ) \mathcal N(i) N(i) 线性表出:
x i = ∑ k ∈ N ( i ) w i k x k \mathbf x_i= \sum_{k\in \mathcal N(i)}w_{ik}\mathbf x_k xi=kN(i)wikxk
那么LLE算法认为在低维空间同样应该保持上述线性关系:
z i ≈ ∑ k ∈ N ( i ) w i k z k \mathbf z_i\approx \sum_{k\in \mathcal N(i)}w_{ik}\mathbf z_k zikN(i)wikzk

所以LLE算法的核心就是如何根据高维空间的邻域线性关系求解具有同邻域线性关系的低维流形嵌入。

LLE算法大致分为以下几步:

Step 1:寻找每个样本 x i x_i xi欧式距离下的 K K K近邻点 N ( i ) \mathcal N(i) N(i),邻域矩阵记作
N i = ( x i k ) p × K , k ∈ N ( i ) N_i=(x_{ik})_{p\times K},\quad k\in \mathcal N(i) Ni=(xik)p×K,kN(i)

Step 2:根据 K K K近邻点计算出每个样本的邻域重构系数 w i \mathbf w_i wi 。这显然是个回归问题,我们最小化均方误差
min ⁡ W ∑ i = 1 N ∥ x i − ∑ k ∈ N ( i ) w i k x k ∥ 2 2 s.t.  ∑ k ∈ N ( i ) w i k = 1 \min_{W}\sum_{i=1}^N\|\mathbf x_i-\sum_{k\in \mathcal N(i)}w_{ik}\mathbf x_k\|_2^2 \\ \text{s.t. }\sum_{k\in \mathcal N(i)}w_{ik}=1 Wmini=1NxikN(i)wikxk22s.t. kN(i)wik=1

为方便计算,一般我们也会对权重系数做归一化的限制。损失函数
J ( W ) = ∑ i = 1 N ∥ x i − ∑ k ∈ N ( i ) w i k x k ∥ 2 2 = ∑ i = 1 N ∥ x i − N i w i ∥ 2 2 = ∑ i = 1 N ∥ ( x i 1 K T − N i ) w i ∥ 2 2 = ∑ i = 1 N w i T C i w i \begin{aligned} J(W)&=\sum_{i=1}^N\|\mathbf x_i-\sum_{k\in \mathcal N(i)}w_{ik}\mathbf x_k\|_2^2 \\ &=\sum_{i=1}^N\|\mathbf x_i-N_i\mathbf w_i\|_2^2 \\ &=\sum_{i=1}^N\|(\mathbf x_i 1_K^T-N_i)\mathbf w_i\|_2^2 \\ &=\sum_{i=1}^N\mathbf w_i^TC_i \mathbf w_i \end{aligned} J(W)=i=1NxikN(i)wikxk22=i=1NxiNiwi22=i=1N(xi1KTNi)wi22=i=1NwiTCiwi

其中 C i = ( x i 1 K T − N i ) T ( x i 1 K T − N i ) ∈ R K × k C_i=(\mathbf x_i 1_K^T-N_i)^T(\mathbf x_i 1_K^T-N_i)\in \R^{K\times k} Ci=(xi1KTNi)T(xi1KTNi)RK×k 已知。则上述优化目标可重写为
min ⁡ W ∑ i = 1 N w i T C i w i s.t.  w i T 1 K = 1 \min_{W}\sum_{i=1}^N\mathbf w_i^TC_i \mathbf w_i\\ \text{s.t. }\mathbf w_i^T 1_K=1 Wmini=1NwiTCiwis.t. wiT1K=1
使用拉格朗日乘子法可以求出
w i = C i − 1 1 K 1 K T C i − 1 1 K \mathbf w_i=\frac{C_i^{-1}1_K}{1_K^TC_i^{-1}1_K} wi=1KTCi11KCi11K
其中,分母是为了让权重系数归一化。另外,为了后续方便使用,我们把系数 w i \mathbf w_i wi充到 N N N维,对于不属于邻域内的点设置为0:
w i k = 0 , if  k ∉ N ( i ) w_{ik}=0, \quad\text{if }k\not\in \mathcal N(i) wik=0,if kN(i)
至此,已求得 N × N N\times N N×N维权重系数矩阵
W = ( w 1 w 2 ⋯ w N ) W=\begin{pmatrix}\mathbf w_1&\mathbf w_2&\cdots&\mathbf w_N\end{pmatrix} W=(w1w2wN)

Step 3: 最后,在低维空间中保持 w i \mathbf w_i wi不变,最小化损失函数来求解低维坐标矩阵 Z Z Z
J ( Z ) = ∑ i = 1 N ∥ z i − ∑ k ∈ N ( i ) w i k z k ∥ 2 2 = ∥ Z ( I − W ) ∥ 2 2 = tr ( Z M Z T ) \begin{aligned} J(Z)&=\sum_{i=1}^N\|\mathbf z_i-\sum_{k\in \mathcal N(i)}w_{ik}\mathbf z_k\|_2^2 \\ &=\|Z(I-W)\|_2^2 \\ &=\text{tr}(ZMZ^T) \end{aligned} J(Z)=i=1NzikN(i)wikzk22=Z(IW)22=tr(ZMZT)

其中 M = ( I − W ) ( I − W ) T M=(I-W)(I-W)^T M=(IW)(IW)T1

一般我们也会加入中心化和协方差限制条件:
∑ i = 1 N z i = 0 ∑ i = 1 N z i z i T = I \sum_{i=1}^N\mathbf z_i=0 \\ \sum_{i=1}^N\mathbf z_i\mathbf z_i^T=I i=1Nzi=0i=1NziziT=I

这样优化问题可以重写为矩阵形式:2
min ⁡ Z tr ( Z M Z T ) s.t.  Z Z T = I \min_Z\text{tr}(ZMZ^T) \\ \text{s.t. }ZZ^T=I Zmintr(ZMZT)s.t. ZZT=I

使用拉格朗日乘子法,可以得到
M Z T = Z T Λ MZ^T= Z^T\Lambda MZT=ZTΛ
这是一个矩阵特征值分解问题, Λ = diag ( λ 1 , λ 2 , ⋯ , λ p ) \Lambda=\text{diag}( \lambda_1 ,\lambda_2, \cdots ,\lambda_p) Λ=diag(λ1,λ2,,λp)的对角元素就是矩阵 M M M的特征值。我们的损失函数变为
tr ( Z M Z T ) = tr ( Z Z T Λ ) = tr ( Λ ) = ∑ i = 1 N λ i \text{tr}(ZMZ^T)=\text{tr}(ZZ^T\Lambda)=\text{tr}(\Lambda)=\sum_{i=1}^N\lambda_i tr(ZMZT)=tr(ZZTΛ)=tr(Λ)=i=1Nλi
于是,要取得降维后的最小损失函数,只需对矩阵 M M M 进行特征值分解,再取最小的 p ′ p' p 个特征值对应的特征向量组成 Z T Z^T ZT

MLLE

Modified Locally Linear Embedding(MLLE) 希望找到的近邻的分布权重尽量在样本的各个方向,而不是集中在一侧。

HLLE

Hessian Eigenmapping 也称 Hessian Based LLE(HLLE),希望保持局部Hessian矩阵二次曲面关系而非线性关系。

LTSA

Local tangent space alignment(LTSA) 虽然从技术上讲不是 LLE 的变体,但在算法上与 LLE 非常相似,可以将其归入此类别。 LTSA希望保持数据集局部的几何关系,同时利用了局部几何到整体性质过渡的技巧。

t-SNE

SNE

随机邻域嵌入(Stochastic Neighbor Embedding)是一种非线性降维算法,主要用于高维数据降维到2维或者3维,进行可视化。例如,当我们想对高维数据集进行分类,但又不清楚这个数据集有没有很好的可分性(同类之间间隔小、异类之间间隔大)时,可以通过降维算法将数据投影到二维或三维空间中。t-SNE是由SNE发展而来。我们先介绍SNE的基本原理,之后再扩展到t-SNE。

相似度:SNE是通过将高维数据点间的距离关系转换为条件概率来表示相似性,并在低维空间中尽量保持这些相似度。

sne_probability

对于高维空间中的点 x i \mathbf x_i xi,以它为中心构建方差为 σ i \sigma_i σi 的高斯分布。条件概率 p j ∣ i p_ {j | i} pji 表示 x j \mathbf x_j xj x i \mathbf x_i xi 邻域的概率,若 x j \mathbf x_j xj x i \mathbf x_i xi 相距很近,那么 p j ∣ i p_ {j | i} pji 很大;反之, p j ∣ i p_ {j | i} pji 很小。
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(- \| \mathbf x_i -\mathbf x_j \| ^2 / (2 \sigma^2_i ))} {\sum_{k \neq i} \exp(- \| \mathbf x_i -\mathbf x_k\| ^2 / (2 \sigma^2_i))} pji=k=iexp(xixk2/(2σi2))exp(xixj2/(2σi2))

困惑度:(perplexity)因为低维空间中很难保留所有全局距离,因此SNE只关注每个数据点的局部邻居,而条件概率中的方差 σ i \sigma_i σi 决定了高斯分布的宽度,即圈选邻域的大小。不同点 x i \mathbf x_i xi的方差取值是不一样,在数据较为密集的区域中,更小的 σ i \sigma_i σi 值更为合适。在SNE中是通过超参数困惑度来系统调整方差的:
P e r p ( P i ) = 2 H ( P i ) Perp(P_i)=2^{H(P_i)} Perp(Pi)=2H(Pi)

其中 H ( P i ) H(P_i) H(Pi)为点 i i i的邻域概率, H ( P i ) H(P_i) H(Pi) P i P_i 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

困惑度通过将熵(entropy)作为指数,等价于在匹配每个点的原始和拟合分布时考虑的最近邻数,较低的困惑度意味着我们在匹配原分布并拟合每一个数据点到目标分布时只考虑最近的几个最近邻,而较高的困惑度意味着拥有较大的「全局观」。在 SNE 和 t-SNE 中,困惑度是我们设置的参数(通常为 5 到 50 间)。

最常用的方法是二分搜索方差 σ i \sigma_i σi ,尽快适应设定的困惑度值。

目标函数:最后我们通过高低维度概率分布间的KL散度来衡量两个分布之间的相似性。
C = ∑ i ∑ j p j ∣ i log ⁡ p j ∣ i q j ∣ i C = \sum_i \sum_j p_{j | i} \log \frac{p_{j | i}}{q_{j | i}} C=ijpjilogqjipji

低维度空间下的点 z i \mathbf z_i zi的条件概率
q j ∣ i = exp ⁡ ( − ∥ z i − z j ∥ 2 ) ∑ k ≠ i exp ⁡ ( − ∥ z i − z k ∥ 2 ) q_ {j | i} = \frac{\exp(- \| \mathbf z_i -\mathbf z_j \| ^2 )} {\sum_{k \neq i} \exp(- \| \mathbf z_i -\mathbf z_k\| ^2 )} qji=k=iexp(zizk2)exp(zizj2)
这里为方便计算,直接设置方差 2 σ i 2 = 1 2\sigma^2_i=1 2σi2=1

然后使用梯度下降法来迭代更新
∂ C ∂ z i = 2 ∑ j ( p j ∣ i – q j ∣ i + p i ∣ j – q i ∣ j ) ( z i – z j ) \frac{\partial C}{\partial\mathbf z_i} = 2 \sum_j (p_{j | i} – q_{j | i} + p_{i | j} – q_{i | j})(\mathbf z_i – \mathbf z_j) ziC=2j(pjiqji+pijqij)(zizj)

需要注意的是KL散度是一个非对称的度量,高维空间中两个数据点距离较近时,若映射到低维空间后距离较远,那么将得到一个很高的惩罚。反之,高维空间中两个数据点距离较远时,若映射到低维空间距离较近,将得到一个很低的惩罚值。因此,SNE会倾向于保留数据中的局部特征。

SNE Algorithm

  1. Initialize points randomly / with PCA
  2. Compute pairwise distances
  3. Convert distances to conditional probabilities
  4. Perform binary search to find o that matches the desired perplexity
  5. Optimize KL divergence for each point via gradient descent

t-SNE

简单来说,t-SNE(t-distributed Stochastic Neighbor Embedding) 只是在SNE基础上进行了一些改进,但其核心算法保持不变。

拥挤问题:(Crowding)我们先来了解下拥挤问题,即不同类别的簇挤在一起,无法区分开来。拥挤问题与某个特定算法无关,而是由于高维空间距离分布和低维空间距离分布的差异造成的。想象下在一个三维的球里面有均匀分布的点,不难想象,如果把这些点投影到一个二维的圆上一定会有很多点是重合的。

t 分布:减轻拥挤问题的一个方法是在低维空间下,引入t分布来将距离转换为概率分布。与高斯分布相比, t 分布有较长的尾部,这有助于数据点在二维空间中更均匀地分布。

对称 SNE:(Symmetric SNE)采用联合概率分布代替原始的条件概率,使得
p i j = p j i , q i j = q j i p_{ij} = p_{ji} ,\quad q_{ij}= q_{ji} pij=pji,qij=qji

目标函数为
C = ∑ i ∑ j p i j log ⁡ p i j q i j C = \sum_i \sum_j p_{ij} \log \frac{p_{ij}}{q_{ij}} C=ijpijlogqijpij

这种表达方式,使得整体简洁了很多,但是会引入异常值的问题。在高维空间中,离群值总在其它点的邻域内有较低的概率,因此它并没有被纳入代价函数考虑,为此作者建议在高维空间取联合概率
p i j = p j i = p j ∣ i + p i ∣ j 2 N p_{ij} = p_{ji} = \frac{p_{j | i} +p_{i | j} }{2N} pij=pji=2Npji+pij

在低维空间下,使用自由度为 1 的 t 分布重新定义概率
q i j = q j i = ( 1 + ∥ z i − z j ∥ 2 ) − 1 ∑ k ≠ l ( 1 + ∥ z k − z l ∥ 2 ) − 1 q_{ij}=q_{ji} = \frac{(1 + \|\mathbf z_i -\mathbf z_j \| ^2)^{-1}}{\sum_{k \neq l} (1 + \| \mathbf z_k -\mathbf z_l \| ^2)^{-1}} qij=qji=k=l(1+zkzl2)1(1+zizj2)1

如上图,t分布受异常值影响更小,拟合结果更为合理,较好的捕获了数据的整体特征。

修正概率分布之后的梯度
∂ C ∂ z i = 4 ∑ j ( p i j – q i j ) ( z i – z j ) ( 1 + ∥ z i – z j ∥ 2 ) − 1 \frac{\partial C}{\partial\mathbf z_i} = 4 \sum_j (p_{ij} – q_{ij} )(\mathbf z_i – \mathbf z_j)(1+\|\mathbf z_i – \mathbf z_j\|^2)^{-1} ziC=4j(pijqij)(zizj)(1+zizj2)1

早期夸大策略:(early exaggeration)在开始优化阶段, p i j p_{ij} pij乘以一个大于1的数进行扩大,来避免因为 q i j q_{ij} qij太小导致优化太慢的问题。比如前50次迭代, p i j p_{ij} pij乘以4。

Barnes-Hut t-SNE

Barnes-Hut t-SNE 是一种高效的降维算法,适用于处理大规模数据集,是 t-SNE 的一个变体。这种算法主要被用来可视化高维数据,并帮助揭示数据中的内部结构。

在处理大型数据集时,直接计算所有点对之间的相互作用非常耗时。Barnes-Hut t-SNE 采用了在天体物理学中常用的 Barnes-Hut 算法来优化计算过程。这种算法最初是为了解决 N体问题(即计算多个物体之间相互作用的问题)而设计的,算法加入了空间划分的数据结构,以降低点之间相互作用的复杂性。

Barnes-Hut 算法通过以下步骤优化这个过程:

  1. 构建空间索引树:在二维空间中构建四叉树,在三维空间中构建八叉树。每个节点表示一个数据点,而每个内部节点则表示它的子节点的质心(即子节点的平均位置)。
  2. 近似相互作用:在计算点之间的作用力(即梯度下降中的梯度)时,Barnes-Hut 算法不是计算每一对点之间的相互作用,而是使用树来估计远距离的影响。对于每个点,如果一个节点(或其包含的数据点的区域)距离足够远(根据预设的阈值,如节点的宽度与距离的比率),则该节点内的所有点可以被视为一个单一的质心,从而简化计算。
  3. 有效的梯度计算:通过这种近似,算法只需要计算与目标点近邻的实际点以及远处质心的影响,极大地减少了必须执行的计算量。

通过这种方法,Barnes-Hut t-SNE 将复杂度从 O ( N 2 ) O(N^2) O(N2) 降低到 O ( N log ⁡ ⁡ N ) O(N\log ⁡N) O(NlogN),使其能够有效地处理数万到数十万级别的数据点。但是这种效率的提升是以牺牲一定的精确度为代价的,因为远距离的相互作用是通过质心近似来实现的,而不是精确计算。

UAMP

UMAP(Uniform Manifold Approximation and Projection)直译为均匀流形近似和投影,它是一种基于数学拓扑流形的方法,用于将高维数据映射到低维空间,以便于可视化和分析。

UMAP的思路和t-SNE很相似,主要通过以下几个方程构建。

条件概率:在高维空间使用指数概率分布
p j ∣ i = exp ⁡ ( − max ⁡ { 0 , d ( x i , x j } − ρ i ) σ i ) p_{j|i}=\exp(-\frac{\max\{0,d(\mathbf x_i,\mathbf x_j\}-\rho_i)}{\sigma_i}) pji=exp(σimax{0,d(xi,xj}ρi))
其中 ρ i \rho_i ρi 是数据点 x i \mathbf x_i xi第一个最近邻居的距离
ρ i = min ⁡ d ( x i , x j ) , 1 ≤ j ≤ K \rho_i=\min d(\mathbf x_i,\mathbf x_j),\quad 1\le j \le K ρi=mind(xi,xj),1jK
这样可以确保流形的本地连通性,从第一个邻居之后条件概率开始指数衰减。

邻域大小:与t-SNE使用困惑度不同,UMAP直接使用了最近邻居的数量来搜索 σ i \sigma_i σi,最终定义每个点周围邻域的半径
∑ j p j ∣ i = log ⁡ 2 K \sum_jp_{j|i}=\log_2K jpji=log2K

umap_n_nearest

概率对称

高维空间基于拓扑学定理
p i j = p j ∣ i + p i ∣ j − p j ∣ i p i ∣ j p_{ij}=p_{j | i} +p_{i | j}-p_{j | i} p_{i | j} pij=pji+pijpjipij

低维空间使用了和 t分布非常相似的曲线簇
q i j = ( 1 + a ( z i − z j ) 2 b ) − 1 q_{ij}=(1+a(\mathbf z_i-\mathbf z_j)^{2b})^{-1} qij=(1+a(zizj)2b)1

目标优化:使用交叉熵(CE)作为损失函数
C E ( X , Z ) = ∑ 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 ] CE(X,Z) = \sum_i \sum_j\left[ p_{ij} \log \frac{p_{ij}}{q_{ij}} + (1-p_{ij} )\log \frac{1-p_{ij}}{1-q_{ij}}\right] CE(X,Z)=ij[pijlogqijpij+(1pij)log1qij1pij]

使用随机梯度下降迭代更新。

拉普拉斯特征映射

拉普拉斯特征映射(Laplacian Eigenmaps)是一种基于图的降维算法,它希望在原空间中相互间有相似关系的点,在降维后的空间中尽可能的靠近。

拉普拉斯特征映射在sklearn流形学习中被叫做谱嵌入(Spectral Embedding)。

邻接矩阵

在图嵌入中,衡量两个点是否相似的最直接度量为构建邻接矩阵(Adjacent Matrix),也称为相似矩阵(Similarity Matrix)或亲和矩阵(Affinity Matrix)。

无向图:如果两个数据点 x i \mathbf x_i xi x j \mathbf x_j xj是邻近点,则在它们之间形成一条边作为连接关系。判断近邻关系的原则通常有以下三种:

  • ϵ \epsilon ϵ近邻法:预先设定一个阈值,若距离满足 ∥ x i − x j ∥ ≤ ϵ \|\mathbf x_i-\mathbf x_j\|\le\epsilon xixjϵ则用边进行连接。该方法基于几何距离信息,建立的连接关系是自然对称的,但阈值的选取往往是困难的,容易出现连接关系混乱。
  • K K K近邻法:取每个点附近的 K K K个点作为邻近点建立连接关系。该方法便于实现,所建立的连接关系是对称的,但是缺乏几何直观性。
  • 全连接法:直接建立所有点之间的连接关系,该方法最为直接,但会对后续的计算过程造成不便。

邻接矩阵:在具有连接关系的两点 x i \mathbf x_i xi x j \mathbf x_j xj 之间的边上赋予权重,得到图的相似矩阵 W W W 。通常有两种方式:

  • 简单形式(simple-minded)

w i j = { 1 , if connected 0 , otherwise w_{ij}=\begin{cases} 1, & \text{if connected} \\ 0, & \text{otherwise} \end{cases} wij={1,0,if connectedotherwise

  • 热核函数(heat kernel)

w i j = { exp ⁡ ( − ∥ z i − z j ∥ 2 / t ) , if connected 0 , otherwise w_{ij}=\begin{cases} \exp(-\|\mathbf z_i-\mathbf z_j\|^2/t ), & \text{if connected} \\ 0, & \text{otherwise} \end{cases} wij={exp(zizj2/t),0,if connectedotherwise

显然, W W W是实对称矩阵。

graph-based_approach

优化目标

假设样本映射到低维空间中的数据矩阵为
Z = ( z 1 z 2 ⋯ z N ) Z=\begin{pmatrix}\mathbf z_1&\mathbf z_2&\cdots&\mathbf z_N\end{pmatrix} Z=(z1z2zN)

优化目标
min ⁡ Z ∑ i = 1 N ∑ j = 1 N ∥ z i − z j ∥ 2 w i j \min_{Z}\sum_{i=1}^N\sum_{j=1}^N\|\mathbf z_i-\mathbf z_j\|^2w_{ij} Zmini=1Nj=1Nzizj2wij
其中 w i j w_{ij} wij 为邻接矩阵 W W W的元素,距离较远的两点之间的边权重较小,而距离较近的两点间边的权重较大。

接下来对损失函数进行化简
J ( Z ) = ∑ i = 1 N ∑ j = 1 N ∥ z i − z j ∥ 2 w i j = ∑ i = 1 N ∑ j = 1 N ( z i T z i − 2 z i T z j + z j T z j ) w i j = ∑ i = 1 N ( ∑ j = 1 N w i j ) z i T z i − 2 ∑ i = 1 N ∑ j = 1 N w i j z i T z j + ∑ j = 1 N ( ∑ i = 1 N w i j ) z j T z j = ∑ i = 1 N d i z i T z i + ∑ j = 1 N d j z j T z j − 2 ∑ i = 1 N ∑ j = 1 N w i j z i T z j = 2 tr ( Z D Z T ) − 2 tr ( Z W Z T ) = 2 tr ( Z ( D − W ) Z T ) = 2 tr ( Z L Z T ) \begin{aligned} J(Z)&=\sum_{i=1}^N\sum_{j=1}^N\|\mathbf z_i-\mathbf z_j\|^2w_{ij} \\ &=\sum_{i=1}^N\sum_{j=1}^N(\mathbf z_i^T\mathbf z_i-2\mathbf z_i^T\mathbf z_j+\mathbf z_j^T\mathbf z_j)w_{ij} \\ &=\sum_{i=1}^N(\sum_{j=1}^Nw_{ij} )\mathbf z_i^T\mathbf z_i-2\sum_{i=1}^N\sum_{j=1}^Nw_{ij} \mathbf z_i^T\mathbf z_j+\sum_{j=1}^N(\sum_{i=1}^Nw_{ij} )\mathbf z_j^T\mathbf z_j \\ &=\sum_{i=1}^Nd_i\mathbf z_i^T\mathbf z_i+\sum_{j=1}^Nd_j\mathbf z_j^T\mathbf z_j-2\sum_{i=1}^N\sum_{j=1}^Nw_{ij} \mathbf z_i^T\mathbf z_j \\ &=2\text{tr}(ZDZ^T)-2\text{tr}(ZWZ^T) \\ &=2\text{tr}(Z(D-W)Z^T) \\ &=2\text{tr}(ZLZ^T) \end{aligned} J(Z)=i=1Nj=1Nzizj2wij=i=1Nj=1N(ziTzi2ziTzj+zjTzj)wij=i=1N(j=1Nwij)ziTzi2i=1Nj=1NwijziTzj+j=1N(i=1Nwij)zjTzj=i=1NdiziTzi+j=1NdjzjTzj2i=1Nj=1NwijziTzj=2tr(ZDZT)2tr(ZWZT)=2tr(Z(DW)ZT)=2tr(ZLZT)

其中矩阵
D = diag ( d 1 , d 2 , ⋯ , d N ) D=\text{diag}(d_1,d_2,\cdots,d_N) D=diag(d1,d2,,dN)
是无向图的度矩阵(Degree Matrix),是对角阵。对角元素分别对应邻接矩阵各行之和
d i = ∑ i = 1 N w i j d_{i}=\sum_{i=1}^Nw_{ij} di=i=1Nwij

矩阵
L = D − M L=D-M L=DM
是无向图的拉普拉斯矩阵(Laplacian Matrix),是实对称阵。

至此优化问题可以重写为矩阵形式:
min ⁡ Z tr ( Z L Z T ) s.t.  Z D Z T = I \min_Z\text{tr}(ZLZ^T) \\ \text{s.t. }ZDZ^T=I Zmintr(ZLZT)s.t. ZDZT=I
我们也会加入标准化条件获取唯一解。

广义特征值分解

使用拉格朗日乘子法求解优化目标,可以得到
L Z T = D Z T Λ LZ^T=DZ^T\Lambda LZT=DZTΛ
这是一个广义特征值分解问题, Λ = diag ( λ 1 , λ 2 , ⋯ , λ p ) \Lambda=\text{diag}( \lambda_1 ,\lambda_2, \cdots ,\lambda_p) Λ=diag(λ1,λ2,,λp)的对角元素就是矩阵 L L L的相对于矩阵 D D D特征值。我们的损失函数变为
tr ( Z L Z T ) = tr ( Z D Z T Λ ) = tr ( Λ ) = ∑ i = 1 p λ i \text{tr}(ZLZ^T)=\text{tr}(ZDZ^T\Lambda)=\text{tr}(\Lambda)=\sum_{i=1}^p\lambda_i tr(ZLZT)=tr(ZDZTΛ)=tr(Λ)=i=1pλi
于是,要取得降维后的最小损失函数,只需对矩阵 L L L 进行广义特征值分解,再取最小的 p ′ p' p 个非零特征值对应的特征向量组成 Z T Z^T ZT


  1. 上式中用到了矩阵迹的性质: ∑ i a i T a i = tr ( A T A ) = tr ( A A T ) \sum_{i}a_i^Ta_i=\text{tr}(A^TA)=\text{tr}(AA^T) iaiTai=tr(ATA)=tr(AAT) ↩︎

  2. tr ( ∂ X A X T ) ∂ X = X ( A + A T ) \frac{\text{tr}(\partial XAX^T)}{\partial X}=X(A+A^T) Xtr(XAXT)=X(A+AT) ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

L54--- 404.左叶子之和(深搜)---Java版

1.题目描述 2.思路 递归遍历左子树 &#xff0c;然后再把左子树的和相加 3.代码实现 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val …

【Git】--Part4--多人协作

在之前的Git博客中&#xff0c;已经把Git本地相关的操作以及远程操作的介绍完了。如下&#xff1a; Git–Part1–基础操作 - 掘金 (juejin.cn)Git–Part2–分支管理 - 掘金 (juejin.cn)Git–Part3–远程操作 & 配置 & 标签管理 - 掘金 (juejin.cn) 这篇文章会介绍两种…

iptables(5)常用扩展模块

简介 之前我们已经介绍过扩展模块的简单使用,比如使用-m tcp/udp ,-m multiport参数通过--dports,--sports可以设置连续和非连续的端口范围。那么我们如何匹配其他的一些参数呢,比如源地址范围,目的地址范围,时间范围等,这就是我们这篇文章介绍的内容。 iprange扩展模块…

Eclipse使用TFS(Team Foundation Server) 超详细

Eclipse使用TFS 1、什么是TFS2、TFS和Git的区别3、签出代码4、签入代码4.1、签出以进行编辑4.2、修改本地代码4.3、签入挂起的更改4.4、签入 如果不能 签入挂起的更改&#xff0c;则先 签出以进行编辑如果 签入挂起的更改不可选中&#xff0c;则 如下操作 1、什么是TFS Team F…

音视频开发—FFmpeg 打开摄像头进行RTMP推流

实验平台&#xff1a;Ubuntu20.04 摄像头&#xff1a;普通USB摄像头&#xff0c;输出格式为YUV422 1.配置RTMP服务器推流平台 使用Nginx 配置1935端口即可&#xff0c;贴上教程地址 ubuntu20.04搭建Nginxrtmp服务器) 2.配置FFmpeg开发环境 过程较为简单&#xff0c;这里不…

决战技术管理转型:决策之道-管理中的智慧与策略

文章目录 引言一、决策的重要性二、常见的决策方式1. 理性决策&#xff08;Rational Decision Making&#xff09;2. 有限理性&#xff08;Bounded Rationality&#xff09;3. 直觉决策&#xff08;Intuitive Decision Making&#xff09;4. 循证管理&#xff08;Evidence-Base…

智能血压计,让健康“听”得见- WT588F02B血压计语音方案

一、语音血压计开发背景&#xff1a; 在快节奏的现代生活中&#xff0c;健康成为了我们最宝贵的财富。而血压&#xff0c;作为反映人体健康状态的重要指标之一&#xff0c;更是需要我们时刻关注。传统的血压计虽然能够为我们提供准确的血压数据&#xff0c;但往往因为操作复杂…

C#ListView的单元格支持添加基本及自定义任意控件

功能说明 使用ListView时&#xff0c;希望可以在单元格显示图片或其他控件&#xff0c;发现原生的ListView不支持&#xff0c;于是通过拓展&#xff0c;实现ListView可以显示任意控件的功能&#xff0c;效果如下&#xff1a; 实现方法 本来想着在单元格里面实现控件的自绘的…

20240621在飞凌的OK3588-C开发板的Buildroot系统中集成i2ctool工具

20240621在飞凌的OK3588-C开发板中打开i2ctool工具 2024/6/21 17:44 默认继承的i2c工具&#xff1a; rootrk3588-buildroot:/# rootrk3588-buildroot:/# i2c i2c-stub-from-dump i2cdump i2cset i2cdetect i2cget i2ctransfer rootrk3588-…

史上最全的整合Harbor安装教程,哈哈哈哈

一、安装docker 下载地址&#xff1a;https://download.docker.com/linux/static/stable/x86_64/docker-23.0.4.tgz 1.1 解压二进制包 wget https://download.docker.com/linux/static/stable/x86_64/docker-23.0.4.tgz tar zxvf docker-23.0.4.tgz mv docker/* /usr/bin1.2…

Flutter 实现软鼠标

文章目录 前言一、如何实现&#xff1f;1、记录鼠标偏移2、MouseRegion获取偏移3、Transform移动图标 二、完整代码三、使用示例总结 前言 flutter在嵌入式系统中运行时&#xff0c;有可能遇到drm鼠标无法使用的情况&#xff0c;但鼠标事件却可以正常接收&#xff0c;此时如果…

用Vite基于Vue3+ts+DataV+ECharts开发数据可视化大屏,即能快速开发又能保证屏幕适配

数据可视化大屏 基于 Vue3、Typescript、DataV、ECharts5 框架的大数据可视化&#xff08;大屏展示&#xff09;开发。此项目vue3实现界面&#xff0c;采用新版动态屏幕适配方案&#xff0c;全局渲染组件封装&#xff0c;支持数据动态刷新渲染、内部DataV、ECharts图表都支持自…

SQLite扩展插件终极集合

作为一个嵌入式数据库引擎&#xff0c;SQLite 与其他数据库管理系统相比&#xff0c;缺少了一些功能。不过 SQLite 提供了一个扩展机制&#xff0c;因此我们可以在网络上找到大量的 SQLite 插件。 今天我们介绍的这个插件叫做 sqlean&#xff0c;它打包了许多流行的 SQLite 扩…

消息队列kafka中间件详解:案例解析(第10天)

系列文章目录 1- 消息队列&#xff08;熟悉&#xff09;2- Kafka的基本介绍&#xff08;掌握架构&#xff0c;其他了解&#xff09;3- Kafka的相关使用&#xff08;掌握kafka常用shell命令&#xff09;4- Kafka的Python API的操作&#xff08;熟悉&#xff09; 文章目录 系列文…

kafka的基本模型

kafka官网 线程和线程之间的数据交互 在jvm里不同的线程有自己的栈内存&#xff0c;但彼此之间交互可以在共享的内存中进行&#xff0c;即堆内存&#xff0c;堆内存会将这些消息放到队列中&#xff0c;具体实现jvm见&#xff0c;栈内存各自维护&#xff0c;堆内存大家共享 进…

微信小程序UI组件库合集

文章目录 前言参考地址推荐组件库1.官方WeUI&#xff08;建议使用☆☆☆☆&#xff09;2.ColorUI&#xff08;广告很多&#xff0c;不建议使用&#xff09;3.vantUI又名&#xff1a;ZanUI&#xff08;操作简单&#xff0c;建议使用☆☆☆☆&#xff09;4.MinUI&#xff08;比较…

STM32---SPI通信协议(小白入、含源码)

写在前面&#xff1a;在单片机的学习过程中&#xff0c;各种通信协议的学习是必不可少的&#xff0c;在前面我们学习了串口通信、IIC通信&#xff0c;本节我们来认识一下SPI通信协议。包括其SPI基本概念、NORFLASH芯片的介绍以及相关的例程实验。 目录 一、SPI介绍 1.1什么是…

【小白专用24.6.18】C# SqlSugar:连接数据库实现简单的,增、删、改、查

【小白专用 已验证24.6.18】C# SqlSugar操作MySQL数据库实现增删改查-CSDN博客 通过NuGet包管理器搜索SqlSugar&#xff08;MySql还要安装MySql.Data、Newtonsoft.Json&#xff09;包并安装 SqlSugarClient db new SqlSugarClient(new ConnectionConfig(){ConnectionString …

中国信通院专访镜舟科技:开源商业化走了多远?

据《2023 中国开源发展蓝皮书》显示&#xff0c;随着数字化转型的深入&#xff0c;开源生态在去年快速发展&#xff0c;开源商业化的模式也逐渐成型。镜舟科技作为开源商业化的先行者&#xff0c;也在技术创新和商业拓展中稳步增长。 日前&#xff0c;中国信息通信研究院&…

Python基础教程(二十八):pip模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…