05降维——《数据挖掘(主编:吕欣 王梦宁)》读书笔记
第五章 降维
1 常见降维算法
- 线性降维方法:各个属性(特征)独立无关
- 奇异值分解
SVD - 主成分分析
PCA - 因子分析
FA - 线性判别分析
LDA
- 奇异值分解
- 非线性降维方法:各个属性(特征)存在较强的相关性
- 多维尺度变换
MDS - 等距特征映射
IsoMap - t分布随机邻域嵌入
t-SNE - 统一流行逼近与投影
UMAP
- 多维尺度变换
2 奇异值分解SVD
from numpy import linalg.svd
一种将高维矩阵表示为三个低维矩阵乘积的矩阵分解方法
算法描述
A(N×p)=U(N×N)Σ(N×p)V(p×p)T \boldsymbol{A}_{(N\times p)}=\boldsymbol{U}_{(N \times N)}\boldsymbol{\Sigma}_{(N\times p)}\boldsymbol{V}_{(p \times p)}^T A(N×p)=U(N×N)Σ(N×p)V(p×p)T
其中U(N×N)\boldsymbol{U}_{(N \times N)}U(N×N)为左奇异矩阵,V(p×p)\boldsymbol{V}_{(p \times p)}V(p×p)为右奇异矩阵,且U、V\boldsymbol{U}、\boldsymbol{V}U、V均为正交矩阵;Σ(N×p)\boldsymbol{\Sigma}_{(N\times p)}Σ(N×p)为奇异值矩阵,其主对角线上的值称为奇异值,其他位置元素都为0
算法步骤
- 求解矩阵ATA\boldsymbol{A}^T\boldsymbol{A}ATA的特征值λ1,λ2,⋅⋅⋅,λp(λ1≥λ2≥⋅⋅⋅≥λp)\lambda_1,\lambda_2,···,\lambda_p(\lambda_1 \ge \lambda_2 \ge ··· \ge\lambda_p)λ1,λ2,⋅⋅⋅,λp(λ1≥λ2≥⋅⋅⋅≥λp),以及对应的正交化特征向量矩阵(v1,v2,...,vp)(\boldsymbol{v_1,v_2,...,v_p})(v1,v2,...,vp),得到右奇异矩阵V=(v1,v2,...,vp)\boldsymbol{V}=(\boldsymbol{v_1,v_2,...,v_p})V=(v1,v2,...,vp)
- 求解矩阵AAT\boldsymbol{AA}^TAAT的特征值ω1,ω2,...,ωN(ω1≥ω2≥⋅⋅⋅≥ωN)\omega_1,\omega_2,...,\omega_N(\omega_1 \ge \omega_2 \ge ··· \ge\omega_N)ω1,ω2,...,ωN(ω1≥ω2≥⋅⋅⋅≥ωN),以及对应的正交化特征向量矩阵(u1,u2,...,uN)(\boldsymbol{u_1,u_2,...,u_N})(u1,u2,...,uN),得到右奇异矩阵U=(u1,u2,...,uN)\boldsymbol{U}=(\boldsymbol{u_1,u_2,...,u_N})U=(u1,u2,...,uN)
- 求出奇异值矩阵Σ(N×p)=Σ(N×p)=(Σ1000)\boldsymbol{\Sigma}_{(N\times p)}=\boldsymbol{\Sigma}_{(N\times p)}= \begin{pmatrix} \boldsymbol{\Sigma}_1 & 0\\ 0 & 0 \end{pmatrix}Σ(N×p)=Σ(N×p)=(Σ1000),Σ1=diag(λ1,λ2,⋅⋅⋅,λp)\boldsymbol{\Sigma}_1 =diag(\sqrt{\lambda _1}, \sqrt{\lambda _2}, ···,\sqrt{\lambda _p})Σ1=diag(λ1,λ2,⋅⋅⋅,λp),λi\lambda_iλi为矩阵ATA\boldsymbol{A^TA}ATA的特征值
- 得到奇异值分解结果A=UΣVT\boldsymbol{A}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V}^TA=UΣVT
截断奇异值分解Truncated SVD
SVD算法在分解过程中,仅保留最大的d个奇异值对应的部分,其中d远远小于p(原始数据维数)
A(N×p)=U(N×N)Σ(N×p)V(p×p)T≈U(N×d)Σ(d×d)V(d×p)T \boldsymbol{A}_{(N\times p)}=\boldsymbol{U}_{(N \times N)}\boldsymbol{\Sigma}_{(N\times p)}\boldsymbol{V}_{(p \times p)}^T \approx \boldsymbol{U}_{(N \times d)}\boldsymbol{\Sigma}_{(d\times d)}\boldsymbol{V}_{(d \times p)}^T A(N×p)=U(N×N)Σ(N×p)V(p×p)T≈U(N×d)Σ(d×d)V(d×p)T
算法不足
使用SVD算法对数据矩阵分解后得到的结果(奇异值和奇异矩阵),无法直接对应于原始数据的特征,导致降维后的数据可读性与可解释性较低
3 主成分分析PCA
from sklearn.decomposition import PCA
采用线性变换将一组统计变量(指标)变换成为新的一组综合变量,转换后的这组变量称为主成分,且主成分之间互不相关,其着重解释各变量的总方差
为消除由于量纲不同可能带来的影响,一般在主成分分析中会首先对原始数据进行标准化处理
标准化处理:
from sklearn.preprocessing import StandardScaler
算法描述
F=ATX \boldsymbol{F}=\boldsymbol{A}^T\boldsymbol{X} F=ATX
其中F=(F1,F2,⋅⋅⋅,Fp)T,A=(A1,A2,⋅⋅⋅,AP)=(a11a12⋯a1pa21a22⋯a2p⋮⋮⋱⋮ap1ap2⋯app)\boldsymbol{F}=(F_1,F_2,···,F_p)^T,\boldsymbol{A}=(\boldsymbol{A_1,A_2,···,A_P})=\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1p} \\ a_{21} & a_{22} & \cdots & a_{2p} \\ \vdots & \vdots & \ddots &\vdots \\ a_{p1} & a_{p2} & \cdots &a_{pp} \end{pmatrix}F=(F1,F2,⋅⋅⋅,Fp)T,A=(A1,A2,⋅⋅⋅,AP)= a11a21⋮ap1a12a22⋮ap2⋯⋯⋱⋯a1pa2p⋮app
算法步骤
- 求解标准化后的数据矩阵X\boldsymbol{X}X的协方差矩阵Σ\boldsymbol{\Sigma}Σ的特征值,并进行降序排列λ1,λ2,⋅⋅⋅,λp(λ1≥λ2≥⋅⋅⋅≥λp)\lambda_1,\lambda_2,···,\lambda_p(\lambda_1 \ge \lambda_2 \ge ··· \ge\lambda_p)λ1,λ2,⋅⋅⋅,λp(λ1≥λ2≥⋅⋅⋅≥λp)
- 求解各特征值对应的单位化特征向量矩阵A=(A1,A2,⋅⋅⋅,Ap)\boldsymbol{A}=(\boldsymbol{A_1,A_2,···,A_p})A=(A1,A2,⋅⋅⋅,Ap)
- 确定主成分个数mmm。前mmm个主成分的累计方差贡献率为∑i=1mλi/∑j=1pλj\sum_{i=1}^m{\lambda_i}/\sum_{j=1}^p{\lambda_j}∑i=1mλi/∑j=1pλj,一般可要求累计方差贡献率大于80%80\%80%
- 得到降维后的主成分F=ATX\boldsymbol{F}=\boldsymbol{A}^T\boldsymbol{X}F=ATX
算法性质
- 每个主成分的系数平方和为1
- 主成分之间相互独立
- 主成分的方差依次递减
算法评价
PCA算法适用于变量之间有较强的相关性的数据,如果原始数据相关性较弱时,方差小的成分可能含有影响样本差异的重要信息,降维丢弃可能对后续数据处理有影响
4 因子分析FA
from factor_analyzer import FactorAnalyzer
通过使用少数公共因子与特殊因子来描述原有的变量,并着重分析各变量之间的协方差,以此实现数据的降维
主成分分析 VS 因子分析
主成分分析:想把现有的变量变为少数几个新的变量(新的变量几乎带有原来所有变量的信息)
因子分析:需要寻找潜在的因子,并对这些因子进行解释
与主成分分析相比,因子分析中可以对因子进行旋转,在解释和可读性方面更加有优势
算法描述
X−μ=AF+ε \boldsymbol{X}-\boldsymbol{\mu}=\boldsymbol{AF}+\boldsymbol{\varepsilon} X−μ=AF+ε
其中F=(f1,f2,⋅⋅⋅,fm)T,ε=(ε1,ε2,⋅⋅⋅,εp)T\boldsymbol{F}=(f_1,f_2,···,f_m)^T,\boldsymbol{\varepsilon}=(\varepsilon_1,\varepsilon_2,···,\varepsilon_p)^TF=(f1,f2,⋅⋅⋅,fm)T,ε=(ε1,ε2,⋅⋅⋅,εp)T,因子载荷矩阵A=(A1,A2,⋅⋅⋅,AP)=(a11a12⋯a1ma21a22⋯a2m⋮⋮⋱⋮ap1ap2⋯apm)\boldsymbol{A}=(\boldsymbol{A_1,A_2,···,A_P})=\begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1m} \\ a_{21} & a_{22} & \cdots & a_{2m} \\ \vdots & \vdots & \ddots &\vdots \\ a_{p1} & a_{p2} & \cdots &a_{pm} \end{pmatrix}A=(A1,A2,⋅⋅⋅,AP)= a11a21⋮ap1a12a22⋮ap2⋯⋯⋱⋯a1ma2m⋮apm
记载荷矩阵A\boldsymbol{A}A中第iii行元素的平方和hi2h_i^2hi2为第iii共同度:hi2h_i^2hi2越大,则该变量能被公共因子解释的程度越高
记载荷矩阵A\boldsymbol{A}A中第jjj列元素的平方和gj2g_j^2gj2:gj2g_j^2gj2越大,则该公共因子对于解释原始变量的作用就越大
算法步骤
-
进行适用性检验。对数据矩阵D\boldsymbol{D}D进行标准化处理后,求得协方差矩阵Σ\boldsymbol{\Sigma}Σ,利用KMO检验和Bartlett球性检验方法判断是否可以对变量进行因子分析
适用性检验:
检验特征之间是否具有相关性,如果相关性太低则不适合使用因子分析
-
KMO检验:KMO−value>0.6KMO-value>0.6KMO−value>0.6
from factor_analyzer.factor_analyzer import calculate_kmo -
Bartlett球性检验:p−value<0.05p-value<0.05p−value<0.05
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
-
-
确定公共因子个数。根据原有变量求解协方差矩阵并求解特征值及特征向量,可根据因子特征值大于1或累计特征值所占百分比大于80%80\%80%,确定公共因子个数mmm,求得对应的特征向量
-
求解初始因子载荷矩阵。根据公式A=UΛ1/2=(λ1u1,λ2u2,⋯ ,λmum)\boldsymbol{A}=\boldsymbol{U\Lambda^{1/2}}=(\sqrt{\lambda_1}\boldsymbol{u_1},\sqrt{\lambda_2}\boldsymbol{u_2},\cdots,\sqrt{\lambda_m}\boldsymbol{u_m})A=UΛ1/2=(λ1u1,λ2u2,⋯,λmum),求得初始因子载荷矩阵
-
进行因子旋转A∗=AQ\boldsymbol{A^*}=\boldsymbol{AQ}A∗=AQ。采用因子旋转方法将因子载荷矩阵正交旋转,使得因子变量更具有可解读性
因子旋转:
基于公共因子模型的选择不定性,可以对载荷矩阵进行旋转。因子旋转是指用一个正交矩阵Q\boldsymbol{Q}Q对载荷矩阵A\boldsymbol{A}A旋转,记旋转因子载荷矩阵A∗=AQA^*=AQA∗=AQ,此时正交因子模型可写为:
X−μ=A∗(QTF)+ε \boldsymbol{X}-\boldsymbol{\mu}=\boldsymbol{A}^*(\boldsymbol{Q}^T\boldsymbol{F})+\boldsymbol{\varepsilon} X−μ=A∗(QTF)+ε因子旋转方法:
- 四次方最大法:因子负荷平方和最大化
- 方差最大法:方差最大化
- 等量最大法:前两者权衡
-
计算因子得分。采用最小二乘法计算因子得分,并对因子进行命名
算法性质
- 公共因子和特殊因子之间不相关
- 各公共因子之间不相关,且方差均为1
- 各特殊因子之间不相关且方差不相等
算法评价
通过识别数据中的共性和模式,可以将大量的变量归纳为较少数量的因子
5 线性判别分析LDA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
旨在找到原始数据特征变量的一个线性组合,然后将数据投影到一个新的空间。这使得不同类别数据投影点的中心尽可能的远,同类别数据的投影点的中心尽可能的近,即类间方差最大化,类内方差最小化
算法步骤
-
构造最大化目标函数J(w)=∏i=1dwiTSbwiwiTSwwiJ(\boldsymbol{w})=\prod\limits_{i=1}^d\cfrac{\boldsymbol{w_i^TS_bw_i}}{\boldsymbol{w_i^TS_ww_i}}J(w)=i=1∏dwiTSwwiwiTSbwi
-
类间散度矩阵Sb=∑j=1kNj(μj−μ)(μj−μ)T\boldsymbol{S_b}=\sum_{j=1}^k{N_j(\boldsymbol{\mu_j}-\boldsymbol{\mu})(\boldsymbol{\mu_j}-\boldsymbol{\mu})^T}Sb=∑j=1kNj(μj−μ)(μj−μ)T
-
类内散度矩阵Sw=∑j=1k∑x∈Xj(x−μj)(x−μj)T\boldsymbol{S_w}=\sum_{j=1}^k{\sum_{x \in \boldsymbol{X_j}}{(\boldsymbol{x}-\boldsymbol{\mu_j})(\boldsymbol{x}-\boldsymbol{\mu_j})^T}}Sw=∑j=1k∑x∈Xj(x−μj)(x−μj)T
-
-
计算类内散度矩阵Sw\boldsymbol{S_w}Sw与类间散度矩阵Sb\boldsymbol{S_b}Sb,求出矩阵Sw−1Sb\boldsymbol{S_w}^{-1}\boldsymbol{S_b}Sw−1Sb
矩阵不可逆时:
- 对矩阵Sw\boldsymbol{S_w}Sw进行SVD分解。得Sw=UΣVT\boldsymbol{S_w}=\boldsymbol{U}\boldsymbol{\Sigma}\boldsymbol{V}^TSw=UΣVT,进而Sw−1=VΣ−1UT\boldsymbol{S_w}^{-1}=\boldsymbol{V}\boldsymbol{\Sigma}^{-1}\boldsymbol{U}^TSw−1=VΣ−1UT
- 先用PCA对数据进行降维,使得降维后的矩阵Sw∗\boldsymbol{S_w}^*Sw∗可逆。(Sw∗)−1=∑j=1kNjw(μj−μ)−1(\boldsymbol{S_w}^*)^{-1}=\sum_{j=1}^k{N_j\boldsymbol{w}(\boldsymbol{\mu_j}-\boldsymbol{\mu}})^{-1}(Sw∗)−1=∑j=1kNjw(μj−μ)−1
-
通过对矩阵Sw−1Sb\boldsymbol{S_w}^{-1}\boldsymbol{S_b}Sw−1Sb进行特征值求解得到投影方向w\boldsymbol{w}w
-
计算投影后的数据点zi=wTxi\boldsymbol{z_i}=\boldsymbol{w}^T\boldsymbol{x_i}zi=wTxi,将原始数据投影到直线yyy上
算法评价
LDA算法寻找满足最大化类间距离和最小化类内距离的最佳投影方向,在低维空间中能够区分不同类别的数据
但LDA算法的计算复杂度较高,而且当样本数量较少或者类别之间的方差差异很大时,容易出现过拟合现象
LDA算法能够找到一个投影方向,使得不同类别的数据点在投影后能够有很好的可分性,利用类别信息来最大程度保留数据的判别性能、
6 多维尺度变换MDS
from sklearn.manifold import MDS
在尽可能保持数据点之间的相似性不变的前提下,将高维坐标的数据点投影到低维的坐标系中的一种降维方法
算法步骤
- 计算数据集的距离矩阵Dd(N×N)={dij}=∥xi−xj∥\boldsymbol{D}_{d(N\times N)}=\{d_{ij}\}=\parallel{x_i-x_j}\parallelDd(N×N)={dij}=∥xi−xj∥,求出dij2,d⋅j2,di⋅2,d⋅⋅2d_{ij}^2,d_{·j}^2,d_{i·}^2,d_{··}^2dij2,d⋅j2,di⋅2,d⋅⋅2
- 根据公式bij=−12(dij2−d⋅j2−di⋅2+d⋅⋅2)b_{ij}=-\cfrac{1}{2}(d_{ij}^2-d_{·j}^2-d_{i·}^2+d_{··}^2)bij=−21(dij2−d⋅j2−di⋅2+d⋅⋅2),得到内积矩阵B\boldsymbol{B}B
- 对矩阵B\boldsymbol{B}B进行特征值分解,得B=VΛVT\boldsymbol{B}=\boldsymbol{V \Lambda V^T}B=VΛVT,选择前kkk个最大的特征值Λk\boldsymbol{\Lambda_k}Λk及对应的特征向量Vk\boldsymbol{V_k}Vk
- 计算降维后的矩阵Z(N×k)=VkΛk1/2\boldsymbol{Z}_{(N \times k)}=\boldsymbol{V_k \Lambda_k^{1/2}}Z(N×k)=VkΛk1/2
算法评价
MDS算法降维后的数据布局反映原始数据的相似性和差异性,但使用的前提是数据点之间的距离可以用线性函数表示,这里采用欧式距离作为数据点之间的距离度量
7 等距特征映射IsoMap
from sklearn.manifold import Isomap
一种基于全局特征保持的流形学习算法
MDS VS IsoMap
- MDS算法:两点之间的距离为欧式距离(直线距离)
- IsoMap算法:两点之间的距离为测底线距离
算法步骤
-
根据输入的高维数据集,计算样本之间的距离矩阵
-
根据指定近邻点的个数或者设定的距离与之构建近邻图
近邻图:
- kkk近邻图:指定近邻点的个数kkk
- ε\varepsilonε近邻图:制定距离阈值ε\varepsilonε
-
通过最短路径算法计算邻接图中数据点之间的最短距离,得到数据点的实际侧低距离矩阵
常用最短路径算法:
- Dijkstra算法
- Floyd算法
- Bellman-Ford算法
- SPFA算法
-
通过MDS算法对侧低距离矩阵进行降维
算法评价
IsoMap算法能够在降维的同时尽量保持原始数据之间的相对位置关系,在保留原始数据的总体结构和流形结构特性的同时进行降维,在较低维数下对数据进行可视化展示。
IsoMap算法计算复杂度和空间复杂度都较高,不适用于数量级较大的数据集
8 t分布随机邻域嵌入t-SNE
from sklearn.manifold import TSNE
关注数据的局部结构流形学习方法
用条件概率度量数据点之间的相似性,并最小化高维空间和低维空间中数据点相似度的差异来实现数据的非线性降维
算法描述
高维空间:
采用高斯分布构建条件分布函数PiP_iPi,PiP_iPi表示给定数据点xix_ixi时,其他所有数据点的条件概率分布。以xix_ixi为中心构建方差为σi\sigma_iσi的高斯分布,xix_ixi以条件概率pj∣ip_{j|i}pj∣i选择xjx_jxj作为它的邻近点,定义pj∣ip_{j|i}pj∣i为
pj∣i=exp(−∥xi−xj∥2/2σi2)∑k≠iexp(−∥xi−xk∥2/2σi2) p_{j|i}=\cfrac{\exp{\left(-\parallel x_i - x_j \parallel^2 / 2\sigma_i^2 \right)}}{\sum_{k \ne i}{\exp{\left(-\parallel x_i - x_k \parallel^2 / 2\sigma_i^2 \right)}}} pj∣i=∑k=iexp(−∥xi−xk∥2/2σi2)exp(−∥xi−xj∥2/2σi2)
SNE算法只关注不同数据点之间的相似度,所以认为pi∣i=0p_{i|i}=0pi∣i=0
低维空间:
采用自由度为1的t分布构建条件概率分布函数QiQ_iQi,同理定义qj∣iq_{j|i}qj∣i为
qj∣i=(1+∥yi−yj∥2)−1∑k≠l(1+∥yk+yl∥2)−1 q_{j|i}=\cfrac{(1+ \parallel y_i - y_j \parallel^2)^{-1}}{\sum_{k \ne l}{(1+ \parallel y_k + y_l \parallel^2)^{-1}}} qj∣i=∑k=l(1+∥yk+yl∥2)−1(1+∥yi−yj∥2)−1
目标函数:
采用KL散度度量概率分布的相似性,运用梯度下降算法求解目标函数C
C=∑iKL(Pi∥Qi)=∑i∑jpj∣ilogpj∣iqj∣i C=\sum_i{KL(P_i \parallel Q_i)=\sum_i{\sum_j{p_{j|i}\log{\cfrac{p_{j|i}}{q_{j|i}}}}}} C=i∑KL(Pi∥Qi)=i∑j∑pj∣ilogqj∣ipj∣i
改进随机邻域嵌入SNE算法
| SNE算法的局限性 | t-SNE算法的改进 |
|---|---|
| 条件不对称问题:$p_{j | i}\ne p_{i |
| **数据”拥挤“问题:**SNE算法使用高斯函数构建条件概率分布,但由于高斯分布在远离均值处呈现指数式下降趋势,导致数据”拥挤“问题的出现 | t-SNE算法在低维空间中使用t分布构建条件概率函数 |
算法步骤
- 对于给定的高维数据集,构建条件概率pj∣i=exp(−∥xi−xj∥2/2σi2)∑k≠iexp(−∥xi−xk∥2/2σi2)p_{j|i}=\cfrac{\exp{\left(-\parallel x_i - x_j \parallel^2 / 2\sigma_i^2 \right)}}{\sum_{k \ne i}{\exp{\left(-\parallel x_i - x_k \parallel^2 / 2\sigma_i^2 \right)}}}pj∣i=∑k=iexp(−∥xi−xk∥2/2σi2)exp(−∥xi−xj∥2/2σi2)
- 在低维空间中,引入t分布函数构建条件概率qj∣i=(1+∥yi−yj∥2)−1∑k≠l(1+∥yk+yl∥2)−1q_{j|i}=\cfrac{(1+ \parallel y_i - y_j \parallel^2)^{-1}}{\sum_{k \ne l}{(1+ \parallel y_k + y_l \parallel^2)^{-1}}}qj∣i=∑k=l(1+∥yk+yl∥2)−1(1+∥yi−yj∥2)−1
- 计算联合概率pij=pi∣j+pj∣i2np_{ij}=\cfrac{p_{i|j}+p_{j|i}}{2n}pij=2npi∣j+pj∣i,令pi∣j,pj∣i:=pijp_{i|j},p_{j|i}:=p_{ij}pi∣j,pj∣i:=pij
- 使用梯度下降算法求解∂C∂yi=4∑j(pj∣i−qj∣i)(yi−yj)(1+∥yi−yj∥2)−1\cfrac{\partial C}{\partial y_i}=4\sum_j{(p_{j|i}-q_{j|i})(y_i-y_j)(1+\parallel y_i-y_j \parallel^2)^{-1}}∂yi∂C=4∑j(pj∣i−qj∣i)(yi−yj)(1+∥yi−yj∥2)−1,获得数据点在低维空间中的分布qj∣iq_{j|i}qj∣i,以最小化目标函数CCC
算法评价
t-SNE算法在处理数据时对异常值较为敏感,且其计算复杂度较高,因此不适用于处理高维稀疏数据和大规模数据
由于其局部优化性质,t-SNE算法在降维过程中通常无法保留全局数据结构,这使其保留全局数据结构,这使其在需要完整保留数据集的整体分布和关系的情况下可能表现不佳
当高维空间中两个数据点距离较近,映射到低维空间后距离较远时,将得到一个很高的惩罚值;但如果高维空间中两个数据点距离较远,映射到低维空间距离较近时,惩罚值反而很低
9 统一流行逼近与投影UMAP
from umap import UMAP
基本思想是先构建高维空间的局部结构,然后通过梯度下降算法最优化目标函数,以保持低维空间中数据点的局部关系和全局结构
算法描述
高维空间:
计算点xix_ixi与最近kkk个点之间的距离为d(xi,xij)d(x_i,x_{ij})d(xi,xij),其中j=1,2,⋯ ,kj=1,2,\cdots,kj=1,2,⋯,k,记xix_ixi的最近邻值ρi\rho_iρi为
ρi=min{d(xi,xij)∣1≤j≤k,d(xi,xij)>0} \rho_i=\min\{d(x_i,x_{ij})|1 \le j \le k,d(x_i,x_{ij})>0\} ρi=min{d(xi,xij)∣1≤j≤k,d(xi,xij)>0}
将数据点xix_ixi选择数据点xijx_{ij}xij作为其最近邻的概率记为pj∣ip_{j|i}pj∣i
pj∣i=e−d(xi,xij)−ρiσi p_{j|i}=e^{-\cfrac{d(x_i,x_{ij})-\rho_i}{\sigma_i}} pj∣i=e−σid(xi,xij)−ρi
其中σi\sigma_iσi为归一化因子,可由如下公式计算得出
∑j=1ke−d(xi,xij)−ρiσi=log2k \sum_{j=1}^k{e^{-\cfrac{d(x_i,x_{ij})-\rho_i}{\sigma_i}}}=\log_2{k} j=1∑ke−σid(xi,xij)−ρi=log2k
用联合概率代替条件概率
pij=(pj∣i+pi∣j)−pj∣ipi∣jpj∣i,pi∣j:=pij p_{ij}=(p_{j|i}+p_{i|j})-p_{j|i}p_{i|j}\\ p_{j|i},p_{i|j}:=p_{ij} pij=(pj∣i+pi∣j)−pj∣ipi∣jpj∣i,pi∣j:=pij
低维空间:
引入a,ba,ba,b两个参数计算概率分布函数,通常取参数a≈1.929,b≈0.7915a \approx 1.929,b \approx 0.7915a≈1.929,b≈0.7915,yiy_iyi和yjy_jyj之间的条件概率分布表示为
qij=(1+a(∥yi−yj∥2)b)−1 q_{ij}=\left(1+a(\parallel y_i - y_j \parallel^2)^b\right)^{-1} qij=(1+a(∥yi−yj∥2)b)−1
目标函数:
C=∑i≠jpijlog(pijqij)+(1−pij)log(1−pij1−qij) C=\sum_{i \ne j}{p_{ij}\log{(\cfrac{p_{ij}}{q_{ij}})}}+(1-p_{ij})\log{(\cfrac{1-p_{ij}}{1-q_{ij}})} C=i=j∑pijlog(qijpij)+(1−pij)log(1−qij1−pij)
通过梯度下降等优化方法最小化目标函数CCC
算法评价
适用于高维数据的降维,尤其是当数据具有非线性结构和复杂的局部关系时
对于邻域大小、最小距离和其他超参数的选择非常敏感,这些选择会影响最终的降维结果
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)