数学系列是本人学习笔记,水平有限,错误在所难免,还请读者不吝指正

Nonlinear Dimensionality Reduction by Locally Linear Embedding

简介

局部线性嵌入(LLE)利用非监督学习方法来将高维网络数据嵌入到低维空间中,并在该低维空间中保留网络节点间的邻域信息。区别于局部降维的聚类方法,LLE将网络节点映射到一个统一的低维空间坐标系统中,并且该方法的优化不依赖局部最小值。利用线性重构的局部对称性,LLE 能够学习非线性流形(nonlinear manifold)的全局结构,例如由人脸数据或文本文档生成的流形。

符号规定

大写粗体(例如 X {\bf X} X)表示矩阵
小写粗体(例如 x {\bf x} x)表示向量
大写字母(例如 D D D)表示常量
小写字母(例如 i i i)表示变量

算法原理

LLE 的提出是基于简单的几何直觉。假设我们基于某种潜在的流形取样,得到的数据有 N N N 个实数向量 x i {\bf x_i} xi,每个向量有 D D D 个维度。假如数据量足够,使得取样的数据在流形上均匀分布,那么每个数据点和他的近邻应该集中分布在流形上一个局部的区域内。我们假设在这个局部区域内的点,都可以被其邻居点线性重构出来。LLE 的算法可以分为如下的步骤:

为每个数据点 x i {\bf x}_i xi 寻找欧式距离相近的点。在近邻点的选取上有两种策略,一种是选取固定数目的近邻点,另一种是划定一个邻域,选取在邻域内的点。LLE 采取的是前者,即选取固定的 k k k 个近邻点。

利用近邻点的线性组合来表示点 x i {\bf x}_i xi x i = ∑ j k w i j x i j {\bf x}_i = \sum^k_j {\bf w}_i^j {\bf x}_i^j xi=jkwijxij 请注意这里的上标不是幂次而是向量的分量,即 w i j {\bf w}^j_i wij 表示向量 w i {\bf w}_i wi 的第 j j j 个分量, x i j {\bf x}_i^j xij 表示向量 x i {\bf x}_i xi 的第 j j j 个分量。我们需要求出所有的权重向量 w i , i = 1 , 2 , … , N {\bf w}_i, \ i = 1, 2, \ldots, N wi,i=1,2,,N。那么怎样的 w i {\bf w}_i wi 才是最优的呢?自然而然的,我们肯定是希望 x i {\bf x}_i xi 近邻点的线性组合能够尽可能的接近它,这样,我们就是在寻找能够使得近邻点和 x i {\bf x}_i xi 的欧式距离,也就是使 ϵ ( w ) = ∑ i N ∣ ∣ x i − ∑ j k w i j x i j ∣ ∣ 2 2 \epsilon ({\bf w}) = \sum^N_i ||{\bf x}_i - \sum^k_j {\bf w}_i^j {\bf x}_i^j||^2_2 ϵ(w)=iNxijkwijxij22 最小的 w {\bf w} w,为了计算方便,LLE 还要求对每一个 x i {\bf x}_i xi,都有 ∑ j k w i j = 1 \sum^k_j {\bf w}_i^j = 1 jkwij=1 。为了方便计算,我们先看一个点 x i {\bf x_i} xi 和其近邻点 x i 1 , x i 2 , … , x i k {\bf x}_i^1, {\bf x}_i^2, \ldots, {\bf x}_i^k xi1,xi2,,xik 的距离,因为有 ∑ j k w i j = 1 \sum^k_j{\bf w}_i^j = 1 jkwij=1,所以 x i = x i ∑ j k w i j = ∑ j k w i j x i {\bf x}_i = {\bf x}_i \sum^k_j{\bf w}_i^j = \sum^k_j{\bf w}_i^j{\bf x}_i xi=xijkwij=jkwijxi,那么 ϵ ( w ) = ∑ i N ∣ ∣ x i − ∑ j k w i j x i j ∣ ∣ 2 2 = ∑ i N ∣ ∣ ∑ j k w i j x i − ∑ j k w i j x i j ∣ ∣ 2 2 = ∑ i N ∣ ∣ ∑ j k w i j ( x i − x i j ) ∣ ∣ 2 2 \begin{aligned} \epsilon({\bf w}) & = \sum^N_i||{\bf x}_i - \sum^k_j {\bf w}_i^j {\bf x}_i^j||^2_2 \\ & = \sum^N_i||\sum^k_j{\bf w}_i^j{\bf x}_i - \sum^k_j {\bf w}_i^j {\bf x}_i^j||^2_2 \\ & = \sum^N_i||\sum^k_j{\bf w}_i^j({\bf x}_i - {\bf x}_i^j)||^2_2 \end{aligned} ϵ(w)=iNxijkwijxij22=iNjkwijxijkwijxij22=iNjkwij(xixij)22X i = [ x i − x i 1 , x i − x i 2 , ⋯ , x i − x i k ] w i = [ w i 1 w i 2 ⋮ w i k ] 1 = ( 1 , 1 , ⋯ , 1 ⏟ k 个 ) \begin{aligned} {\bf X}_i & = \begin{bmatrix} {\bf x}_i - {\bf x}_i^1 , {\bf x}_i - {\bf x}_i^2 , \cdots , {\bf x}_i - {\bf x}_i^k \end{bmatrix} \\[2ex] {\bf w}_i & = \begin{bmatrix} w_i^1 \\ w_i^2 \\ \vdots \\ w_i^k \end{bmatrix} \\[6ex] {\bf 1} & = (\underbrace{1, 1, \cdots, 1}_{k 个}) \end{aligned} Xiwi1=[xixi1,xixi2,,xixik]=wi1wi2wik=(k

1,1,,1)ϵ ( w ) = ∑ 1 N ∣ ∣ X i w i ∣ ∣ 2 2 = ∑ 1 N w i T X i T X i w i \begin{aligned} \epsilon({\bf w}) & = \sum^N_1 ||{\bf X}_i{\bf w}_i||^2_2 \\ & = \sum^N_1 {\bf w}_i^T{\bf X}_i^T{\bf X}_i{\bf w}_i \end{aligned} ϵ(w)=1NXiwi22=1NwiTXiTXiwi1 w = 1 {\bf 1w} = 1 1w=1 则我们有优化问题 min ⁡ w ∑ i N w i T X i T X i w i s . t . 1 w i = 1 \min_w \sum_i^N {\bf w}_i^T{\bf X}_i^T{\bf X}_i{\bf w}_i \\ s.t. \quad {\bf 1w}_i = 1 wminiNwiTXiTXiwis.t.1wi=1

f ( w ) = 1 2 ∑ i N w i T X i T X i w i g ( w ) = 1 w i \begin{aligned} f({\bf w}) & = \frac{1}{2} \sum_i^N {\bf w}_i^T{\bf X}_i^T{\bf X}_i{\bf w}_i \\ g({\bf w}) & = {\bf 1w}_i \end{aligned} f(w)g(w)=21iNwiTXiTXiwi=1wif ( w ) f({\bf w}) f(w) 乘上 1 / 2 1/2 1/2 是为了求导的时候消去系数,不影响最后的结果。据此,我们来构造拉格朗日函数(关于拉格朗日乘子法,请参考 浅谈拉格朗日乘子法的数学推导 ) L ( w , λ ) = f ( w ) + λ ( g ( w i ) − 1 ) = 1 2 ∑ i N w i T X i T X i w i + λ ( 1 w i − 1 ) \begin{aligned} {\frak L}({\bf w}, \lambda) & = f({\bf w}) + \lambda(g({\bf w}_i) - 1) \\ & = \frac{1}{2} \sum_i^N {\bf w}_i^T{\bf X}_i^T{\bf X}_i{\bf w}_i + \lambda({\bf 1w}_i - 1) \end{aligned} L(w,λ)=f(w)+λ(g(wi)1)=21iNwiTXiTXiwi+λ(1wi1)分别对 w {\bf w} wλ \lambda λ 求偏导置零,我们已知有矩阵求导公式 ∂ y x ∂ x = y T ∂ x T A x ∂ x = ( A + A T ) x \begin{aligned} \frac{\partial {\bf yx}}{\partial {\bf x}} & = {\bf y}^T \\ \frac{\partial {\bf x}^T{\bf Ax}}{\partial {\bf x}} & = ({\bf A} + {\bf A}^T){\bf x} \end{aligned} xyxxxTAx=yT=(A+AT)x∂ L ( w , λ ) ∂ w i = 1 2 ( 2 X i T X i ) w i + λ 1 T = ( X i T X i ) w i + λ 1 T = 0 ∂ L ( w , λ ) ∂ λ = 1 w i − 1 = 0 \begin{aligned} \frac{\partial {\frak L}({\bf w}, \lambda)}{\partial {\bf w}_i} & = \frac{1}{2}(2 {\bf X}_i^T{\bf X}_i){\bf w}_i + \lambda {\bf 1}^T \\ & = ({\bf X}_i^T{\bf X}_i){\bf w}_i + \lambda {\bf 1}^T \\ & = 0 \\ \frac{\partial {\frak L}({\bf w}, \lambda)}{\partial \lambda} & = {\bf 1w}_i - 1 = 0 \end{aligned} wiL(w,λ)λL(w,λ)=21(2XiTXi)wi+λ1T=(XiTXi)wi+λ1T=0=1wi1=0 X i {\bf X}_i Xi 是已知量,通过上面两式可计算出 w i {\bf w}_i wiλ \lambda λ。若 X i T X i {\bf X}_i^T{\bf X}_i XiTXi 可逆,设 L i = X i T X i {\bf L}_i = {\bf X}_i^T{\bf X}_i Li=XiTXi,则 w i = − λ L i − 1 1 T {\bf w}_i = -\lambda{\bf L}_i^{-1}{\bf 1}^T wi=λLi11T 又因为 1 w i = 1 {\bf 1w}_i = 1 1wi=1,所以 λ = − 1 1 L i − 1 1 T \lambda = - \frac{1}{{\bf 1L}_i^{-1}{\bf 1}^T} λ=1Li11T1 将上式代入 w i = − λ L i − 1 1 T {\bf w}_i = -\lambda{\bf L}_i^{-1}{\bf 1}^T wi=λLi11T,得 w i = − L i − 1 1 T 1 L i − 1 1 T {\bf w}_i = - \frac{{\bf L}_i^{-1}{\bf 1}^T}{{\bf 1L}_i^{-1}{\bf 1}^T} wi=1Li11TLi11T

这样定义的权重 w {\bf w} w 有一个重要的性质,对于任何特定的点 x i {\bf x}_i xi,当对该点和其邻居点所组成的空间进行进行旋转、伸缩或者平移时, w {\bf w} w 保持恒定。这是因为 w {\bf w} w 描述了 x i {\bf x}_i xi 可由其邻居节点线性组合重构而成的这种关系,对该点和其邻居点所组成的空间进行进行旋转、伸缩或者平移相当于对线性方程组 x i = ∑ j k w i j x j {\bf x}_i = \sum^k_j w^{j}_{i} {\bf x}_j xi=jkwijxj 进行各种线性变换(该线性方程组中 x i {\bf x}_i xix j {\bf x}_j xj 是已知量, w i j w^{j}_i wij 是需要求解的未知量)而方程组的线性变换并不影响方差组的解。我们可以看出 w {\bf w} w 的定义不依赖于任何第三方的参照物,所以 w {\bf w} w 描述了一点和其邻居节点内在的几何关系。这样的话,当我们将数据点嵌入到更低维度的 d d d 维空间中( d ≪ D d \ll D dD)时, w {\bf w} w 仍然保持不变。据此,我们可以计算数据点映射到低维空间之后的坐标。
假设我们将所有的 x {\bf x} x 映射到维度为 d ( d ≪ D ) d (d \ll D) d(dD) 的低维空间,我们用 y {\bf y} y 来代表映射后的点,类似的,我们需要使得 ϕ ( w ) = ∑ i N ∣ ∣ y i − ∑ j k w i j y j ∣ ∣ 2 2 \phi ({\bf w}) = \sum^N_i ||{\bf y}_i - \sum^k_j w^{j}_{i} {\bf y}_j||^2_2 ϕ(w)=iNyijkwijyj22 最小。和我们计算 ϵ ( w ) \epsilon ({\bf w}) ϵ(w) 类似,但是现在 w \bf w w 变成了已知量,而点 y \bf y y 则成为了未知量。设 Y = ( y 1 y 2 ⋮ y N ) W = [ w 11 w 12 ⋯ w 1 N w 21 w 22 ⋯ w 2 N ⋮ ⋮ ⋱ ⋮ w N 1 w N 2 ⋯ w N N ] I = [ 1 0 ⋯ 0 0 1 ⋯ 0 ⋮ ⋮ ⋱ 0 0 0 ⋯ 1 ] \begin{aligned} {\bf Y} & = \begin{pmatrix} {\bf y}_1 \\ {\bf y}_2 \\ \vdots \\ {\bf y}_N \end{pmatrix} \\[6ex] {\bf W} & = \begin{bmatrix} w_{11} & w_{12} & \cdots & w_{1N} \\[2ex] w_{21} & w_{22} & \cdots & w_{2N} \\[2ex] \vdots & \vdots & \ddots & \vdots \\[2ex] w_{N1} & w_{N2} & \cdots & w_{NN} \\ \end{bmatrix} \\[10ex] {\bf I} & = \begin{bmatrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & 0 \\ 0 & 0 & \cdots & 1 \end{bmatrix} \end{aligned} YWI=y1y2yN=w11w21wN1w12w22wN2w1Nw2NwNN=1000100001 这里为了计算方便,我们把 W \bf W W 设成 N × N N \times N N×N 的矩阵,每一行代表一个点 y i {\bf y}_i yi 相邻节点的权重,那么 y i {\bf y}_i yi 的相邻节点只有 k k k 个,但我们每一行有 N N N 个 权重 w w w,为了解决这个矛盾,只需要将不是 y i {\bf y}_i yi 相邻节点的权重置为 0 0 0 即可。这样,可得 ϕ ( y ) = ∑ i N ∣ ∣ y i − ∑ j k w i j y j ∣ ∣ 2 2 = ∑ i N ∣ ∣ I i Y − W i Y ∣ ∣ 2 2 = ∣ ∣ ( I − W ) Y ∣ ∣ F 2 = t r ( Y T ( I − W ) T ( I − W ) Y ) \begin{aligned} \phi ({\bf y}) & = \sum^N_i ||{\bf y}_i - \sum^k_j w^{j}_{i} {\bf y}_j||^2_2 \\ & = \sum^N_i||{\bf I}_i{\bf Y} - {\bf W}_i{\bf Y}||^2_2 \\ & = ||({\bf I} - {\bf W}){\bf Y}||^2_F \\ & = tr({\bf Y}^T({\bf I}- {\bf W})^T({\bf I} - {\bf W}){\bf Y}) \end{aligned} ϕ(y)=iNyijkwijyj22=iNIiYWiY22=(IW)YF2=tr(YT(IW)T(IW)Y)M = ( I − W ) T ( I − W ) {\bf M}=({\bf I}- {\bf W})^T({\bf I} - {\bf W}) M=(IW)T(IW),则有 ϕ ( y ) = t r ( Y T M Y ) \phi({\bf y}) = tr({\bf Y}^T{\bf MY}) ϕ(y)=tr(YTMY)Y = [ β 11 β 12 ⋯ β 1 N β 21 β 22 ⋯ β 2 N ⋮ ⋮ ⋱ ⋮ β N 1 β N 2 ⋯ β N N ] {\bf Y} = \begin{bmatrix} \beta_{11} & \beta_{12} & \cdots & \beta_{1N} \\[2ex] \beta_{21} & \beta_{22} & \cdots & \beta_{2N} \\[2ex] \vdots & \vdots & \ddots & \vdots \\[2ex] \beta_{N1} & \beta_{N2} & \cdots & \beta_{NN} \end{bmatrix} Y=β11β21βN1β12β22βN2β1Nβ2NβNN也即 y i = ( β i 1 , β i 2 , ⋯ , β i N ) {\bf y}_i = (\beta_{i1} , \beta_{i2} , \cdots , \beta_{iN}) yi=(βi1,βi2,,βiN)ϕ ( y ) = t r ( [ β 11 β 21 ⋯ β N 1 β 12 β 22 ⋯ β N 2 ⋮ ⋮ ⋱ ⋮ β 1 N β 2 N ⋯ β N N ] M [ β 11 β 12 ⋯ β 1 N β 21 β 22 ⋯ β 2 N ⋮ ⋮ ⋱ ⋮ β N 1 β N 2 ⋯ β N N ] ) \phi({\bf y}) = tr( \begin{bmatrix} \beta_{11} & \beta_{21} & \cdots & \beta_{N1} \\[2ex] \beta_{12} & \beta_{22} & \cdots & \beta_{N2} \\[2ex] \vdots & \vdots & \ddots & \vdots \\[2ex] \beta_{1N} & \beta_{2N} & \cdots & \beta_{NN} \\ \end{bmatrix} {\bf M} \begin{bmatrix} \beta_{11} & \beta_{12} & \cdots & \beta_{1N} \\[2ex] \beta_{21} & \beta_{22} & \cdots & \beta_{2N} \\[2ex] \vdots & \vdots & \ddots & \vdots \\[2ex] \beta_{N1} & \beta_{N2} & \cdots & \beta_{NN} \\ \end{bmatrix} ) ϕ(y)=tr(β11β12β1Nβ21β22β2NβN1βN2βNNMβ11β21βN1β12β22βN2β1Nβ2NβNN)z i = ( β 1 i , β 2 i , ⋯ , β N i ) {\bf z}_i = (\beta_{1i}, \beta_{2i}, \cdots, \beta_{Ni}) zi=(β1i,β2i,,βNi),经过计算我们会发现 ϕ ( y ) = t r ( [ z 1 T M z 1 z 2 T M z 2 ⋱ z N T M z N ] ) = ∑ i N z i T M z i = ∑ i N z i H M z i ( z i 为实数向量, z i H = z i T )  \begin{aligned} \phi({\bf y}) & = tr( \begin{bmatrix} {\bf z}_1^T{\bf Mz}_1 & & & \\[3ex] & {\bf z}_2^T{\bf Mz}_2 & & \\[3ex] & & \ddots & \\[3ex] & & & {\bf z}_N^T{\bf Mz}_N \end{bmatrix}) \\[12ex] & = \sum_i^N {\bf z}_i^T{\bf Mz}_i \\[2ex] & = \sum_i^N {\bf z}_i^H{\bf Mz}_i \quad \text{ (${\bf z}_i$ 为实数向量,${\bf z}_i^H = {\bf z}_i^T$) } \end{aligned} ϕ(y)=tr(z1TMz1z2TMz2zNTMzN)=iNziTMzi=iNziHMzi(zi为实数向量,ziH=ziT) 为了方便计算,我们要求 Y T Y = I {\bf Y}^T{\bf Y} = {\bf I} YTY=I

可以证明, M \bf M M 为厄米特矩阵(Hermitian Matrix)。这是因为, M T = ( ( I − W ) T ( I − W ) ) T = ( I − W ) T ( I − W ) = M {\bf M}^T = (({\bf I}- {\bf W})^T({\bf I} - {\bf W}))^T = ({\bf I}- {\bf W})^T({\bf I} - {\bf W}) = {\bf M} MT=((IW)T(IW))T=(IW)T(IW)=MM \bf M M 又是实数矩阵,所以 M ∗ = M {\bf M}^* = {\bf M} M=MM ∗ {\bf M}^* M 表示 M \bf M M 的共轭矩阵),因此 M H = M {\bf M}^H = {\bf M} MH=M。观察 ϕ ( y ) \phi({\bf y}) ϕ(y)z i H M z i {\bf z}_i^H{\bf Mz}_i ziHMzi 正是瑞利商(Rayleigh quotient) z i H M z i / z i H z {\bf z}_i^H{\bf Mz}_i/{\bf z}_i^H{\bf z} ziHMzi/ziHz 的分子。又因为 Y T Y = I {\bf Y}^T{\bf Y} = {\bf I} YTY=I,所以 z i H z = 1 {\bf z}_i^H{\bf z} = 1 ziHz=1。根据瑞利定理(Rayleigh theorem), M \bf M M 的特征向量即是函数 R ( z ) = z H M z R({\bf z}) = {\bf z}^H{\bf Mz} R(z)=zHMz 的驻点,而对应的特征值即是 R ( z ) R({\bf z}) R(z) 在该点的值。因此,如果我们求使得 ϕ ( y ) \phi({\bf y}) ϕ(y) 最小的 y {\bf y} y,我们首先设定低维空间的维数 d d d,令 d ≪ D d \ll D dD,只需要求出 M \bf M M 所有的特征值,并将特征值从小到大排列,选取前 d d d 个特征值及其对应的特征向量,即可求得映射到低维空间的坐标 Y \bf Y Y(关于瑞利商和瑞利定理,请参考 瑞利商及瑞利定理 )。

参考资料

  1. Sam T. Roweis and Lawrence K. Saul, Nonlinear Dimensionality Reduction by Locally Linear Embedding, SCIENCE VOL 290
  2. https://zhuanlan.zhihu.com/p/47304678
  3. 周志华,机器学习,清华大学出版社
  4. 南瓜书,https://datawhalechina.github.io/pumpkin-book/

浅谈局部线性嵌入(LLE)的数学原理相关推荐

  1. 流行学习、流形学习家族、局部线性嵌入LLE、随机投影(Random Projection)、t-SNE降维及可视化

    流行学习.流形学习家族.局部线性嵌入LLE.随机投影(Random Projection).t-SNE降维及可视化 目录 流行学习.流形学习家族.局部线性嵌入LLE.随机投影(Random Proje ...

  2. 用scikit-learn研究局部线性嵌入(LLE)

    1. scikit-learn流形学习库概述 在scikit-learn中,流形学习库在sklearn.manifold包中.里面实现的流形学习算法有: 1)多维尺度变换MDS算法:这个对应的类是MD ...

  3. 局部线性嵌入(LLE)

    关于LLE可参考局部线性嵌入(LLE)原理总结.本文对上述博客中第三节LLE算法推导给出一些自己的理解. LLE算法推导 对于LLE算法,我们首先要确定邻域大小的选择,即我们需要多少个邻域样本来线性表 ...

  4. 局部线性嵌入(LLE)原理总结

    局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法.和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由 ...

  5. 局部线性嵌入 (Locally linear embedding-LLE)原理总结

    转载:https://www.cnblogs.com/pinard/p/6266408.html?utm_source=itdadao&utm_medium=referral#!comment ...

  6. 局部线性嵌入LLE算法--学习笔记

    流形学习是一大类基于流形的框架,形象说明流形降维: ISOMAP(更多细节可参考:isomap降维算法--学习笔记_Wsyoneself的博客-CSDN博客): LLE: 和传统的PCA,LDA等关注 ...

  7. 局部线性嵌入(LLE)算法matlab可运行

    本文主要是学习LLE算法,可视化原作者给的例程,具体原理请移步参考.如有侵权,请联系删除. 文章目录 绘图结果 代码 参考 绘图结果 以上图片分别为运行代码:scurve_jian.m 和swissr ...

  8. 两种降维方法的总结——LLE(局部线性嵌入),ISOMAP(等度量映射)

    简介 流形学习是一类借鉴了拓扑流形概念的降维方法.流形是在局部与欧式空间同胚的空间,换言之,它在局部具有欧式空间的性质,能用欧式距离来进行距离计算.若低维流形嵌入到高维空间中,则数据样本在高维空间的分 ...

  9. lle算法c 语言,局部线性嵌入算法(LLE)与其Python实现-Go语言中文社区

    PCA是至今为止运用最为广泛的数据降维算法,它通过最小化重构误差达到将高维数据映射到低维并同时保留数据中所存在的绝大部分信息.但是一般的PCA也有缺点,它只能实现线性降维.当然现在也有kernel P ...

最新文章

  1. 粒子群算法实例-求解函数极值
  2. ActiveReports 9实战教程(3): 图文并茂的报表形式
  3. C++ 一周刷完C++基础课程(同C程序进行比较)
  4. (一)mybatis之JDBC介绍
  5. 2022年GPS广播星历精密星历如何下载
  6. JDBC知识 - 马士兵视频教程笔记
  7. 用放大镜看计算机屏幕,使用放大镜可使屏幕上的内容更易于查看
  8. 灵动ICPC冬令营基础-5
  9. winform键盘操控之组合键
  10. 一线城市上海的户口有多好?
  11. medini analyze软件下载安装使用试用购买
  12. 一文带你看懂小程序朋友圈广告是什么
  13. DC/DC电源输入输出滤波电容摆放位置
  14. 照片美妆--人像变老算法研究
  15. 怎么给自己的html网页加个密码,密码正确才能显示网页
  16. python用matplotlib画五角星_基于Matplotlib的Python绘图
  17. Linux 监控工具 tsar
  18. Spring框架(Spring5新功能)
  19. oracle 分组过滤空值,oracle 空值处理,排序过滤
  20. 【 谐响应分析和瞬态分析 】

热门文章

  1. 本明杰富兰克林自律十三条
  2. 各种游戏素材的寻找方法
  3. Python数据可视化:SVM算法实现光学字符识别(实战篇—3)
  4. 转:Qt编译 error: ‘std::tr1’ has not been declared
  5. mkdir创建文件夹,删除文件夹
  6. 【洛谷】P1498 南蛮图腾(分治)题解
  7. 湖南大学计算机技术硕士录取名单,湖南大学各学院2019年硕士研究生拟录取名单...
  8. 如何一键将Word转成PPT
  9. SSM jsp页面发送数据到servlet报400错误
  10. 关于马云的跨境支付技术