1. 引入:子空间学习与降维

什么是子空间学习

  • 子空间学习大意是指通过投影,实现高维特征向低维空间的映射,是一种经典的降维思想。绝大多数的维数约简(降维,投影)算法都算是子空间学习,如PCA、LDA、LPP、LLE等;
  • 本文只介绍前两种维数约减算法,即主成分分析(PCA)和线性判别分析(LDA)。

什么是降维?什么情况下需要降维?

  • 降维:寻找一组映射对样本进行重新表示(representation);
  • 原样本:x=[x1;x2;...;xd]∈Rdx=[x_1;x_2;...;x_d]∈\mathbb{R}^dx=[x1​;x2​;...;xd​]∈Rd;新表示:y=[y1;y2;...;ym]∈Rm(m<d)y=[y_1;y_2;...;y_m]∈\mathbb{R}^m(m<d)y=[y1​;y2​;...;ym​]∈Rm(m<d);降维目标:学习映射ϕ(x)=y\phi(x)=yϕ(x)=y;
  • 我们知道,样本空间是由样本的各个属性张成的空间,假设每个样本有ddd个属性,则样本空间就是一个ddd维空间,ddd维空间中的每个点就是一个样本的表示(representation);
  • 降维就是学习一个从原样本空间到新样本空间(子空间,即维度小于ddd,假设为mmm维)的映射,使得新样本空间中每个点是一个样本的新的表示,也就是说,每个样本的表示从ddd维向量简化为了mmm维向量,这显然是一件好事。

需要降维的情况:如数据冗余。下图中前两列表达的是同一个意思,造成了数据冗余,对此,应当进行降维。

数据冗余的弊端?维度灾难!

  • 增加计算机开销(存储空间、计算资源);
  • 采样困难。

2. 主成分分析(PCA)

假设:映射ϕ(⋅)\phi(·)ϕ(⋅)是线性映射,线性映射的实质就是定义了一个新坐标。

ϕ(⋅):WTx=y∈Rm,W=[w1,w2,...,wm]∈Rd×m\phi(·):W^Tx=y∈\mathbb{R}^m,W=[w_1,w_2,...,w_m]∈\mathbb{R}^{d×m}ϕ(⋅):WTx=y∈Rm,W=[w1​,w2​,...,wm​]∈Rd×m


最大方差理论: 在信号处理中认为信号具有较大的方差,噪声有较小的方差。 即新坐标系上数据方差应越大越好

2.1 目标函数

在新坐标系下最大化数据新表征的方差:max⁡w∑i=1n(yi−yˉ)2,\max\limits_w\sum\limits_{i=1}^n(y_i-\bar{y})^2,wmax​i=1∑n​(yi​−yˉ​)2,s.t.yi=wTxi,∣∣w∣∣=1.\text{s.t.}\quad y_i=w^Tx_i,||w||=1.s.t.yi​=wTxi​,∣∣w∣∣=1.第二个约束条件是为了坐标系标准化。矩阵化表示:max⁡W∑i=1n∣∣yi−yˉ∣∣2,\max\limits_W\sum\limits_{i=1}^n||y_i-\bar{y}||^2,Wmax​i=1∑n​∣∣yi​−yˉ​∣∣2,s.t.yi=WTxi,WTW=I.\text{s.t.}\quad y_i=W^Tx_i,W^TW=I.s.t.yi​=WTxi​,WTW=I.其中W=[w1,...,wm]∈Rd×mW=[w_1,...,w_m]∈\mathbb{R}^{d×m}W=[w1​,...,wm​]∈Rd×m,第二个约束条件保证坐标系为标准正交坐标系,也可表示为∣∣wi∣∣=1,wiTwj=0||w_i||=1,w_i^Tw_j=0∣∣wi​∣∣=1,wiT​wj​=0。PCA降维的过程可以通过数据乘以矩阵来表示,因此是一个线性变换

  • 原样本:x=[x1;x2;...;xd]∈Rdx=[x_1;x_2;...;x_d]∈\mathbb{R}^dx=[x1​;x2​;...;xd​]∈Rd
  • 新表示:y=[y1;y2;...;ym]∈Rm(m<d)y=[y_1;y_2;...;y_m]∈\mathbb{R}^m(m<d)y=[y1​;y2​;...;ym​]∈Rm(m<d)

PCA的目标函数推导:f(W)=∑i=1n∣∣yi−yˉ∣∣2=∑i=1n(yi−yˉ)T(yi−yˉ)=∑i=1ntr((yi−yˉ)(yi−yˉ)T)f(W)=\sum\limits_{i=1}^n||y_i-\bar{y}||^2=\sum\limits_{i=1}^n(y_i-\bar{y})^T(y_i-\bar{y})=\sum\limits_{i=1}^ntr((y_i-\bar{y})(y_i-\bar{y})^T)f(W)=i=1∑n​∣∣yi​−yˉ​∣∣2=i=1∑n​(yi​−yˉ​)T(yi​−yˉ​)=i=1∑n​tr((yi​−yˉ​)(yi​−yˉ​)T)=tr(∑i=1n(yi−yˉ)(yi−yˉ)T)=tr(∑i=1n(WTxi−WTxˉ)(WTxi−WTxˉ))=tr(\sum\limits_{i=1}^n(y_i-\bar{y})(y_i-\bar{y})^T)=tr(\sum\limits_{i=1}^n(W^Tx_i-W^T\bar{x})(W^Tx_i-W^T\bar{x}))=tr(i=1∑n​(yi​−yˉ​)(yi​−yˉ​)T)=tr(i=1∑n​(WTxi​−WTxˉ)(WTxi​−WTxˉ))=tr(∑i=1nWT(xi−xˉ)(xi−xˉ)TW)=tr(WT(∑i=1n(xi−xˉ)(xi−xˉ)T)W)=tr(\sum\limits_{i=1}^nW^T(x_i-\bar{x})(x_i-\bar{x})^TW)=tr(W^T(\sum\limits_{i=1}^n(x_i-\bar{x})(x_i-\bar{x})^T)W)=tr(i=1∑n​WT(xi​−xˉ)(xi​−xˉ)TW)=tr(WT(i=1∑n​(xi​−xˉ)(xi​−xˉ)T)W)=tr(WT(X−Xˉ)(X−Xˉ)TW)=tr(WT(n−1)cov(X)W)=tr(W^T(X-\bar{X})(X-\bar{X})^TW)=tr(W^T(n-1)cov(X)W)=tr(WT(X−Xˉ)(X−Xˉ)TW)=tr(WT(n−1)cov(X)W)

综上,PCA的目标函数如下:f(W)=tr(WT(X−Xˉ)(X−Xˉ)TW)f(W)=tr(W^T(X-\bar{X})(X-\bar{X})^TW)f(W)=tr(WT(X−Xˉ)(X−Xˉ)TW)

2.2 问题求解

优化目标:max⁡Wtr(WT(X−Xˉ)(X−Xˉ)TW),\max\limits_Wtr(W^T(X-\bar{X})(X-\bar{X})^TW),Wmax​tr(WT(X−Xˉ)(X−Xˉ)TW),s.t.WTW=I\text{s.t.}\quad W^TW=Is.t.WTW=I
采用拉格朗日乘子法,目标转化为:min⁡WL(W,λ)=−tr(WT(X−Xˉ)(X−Xˉ)TW)+tr(λ(WTW−I))\min\limits_Wℒ(W,\lambda)=-tr(W^T(X-\bar{X})(X-\bar{X})^TW)+tr(\lambda(W^TW-I))Wmin​L(W,λ)=−tr(WT(X−Xˉ)(X−Xˉ)TW)+tr(λ(WTW−I))令∂L∂W=0\frac{\partial ℒ}{\partial W}=0∂W∂L​=0,得:(X−Xˉ)(X−Xˉ)TW=λW(X-\bar{X})(X-\bar{X})^TW=\lambda W(X−Xˉ)(X−Xˉ)TW=λW这是一个典型的特征值分解问题,即:CW=λW,C=(X−Xˉ)(X−Xˉ)TCW=\lambda W,\quad C=(X-\bar{X})(X-\bar{X})^TCW=λW,C=(X−Xˉ)(X−Xˉ)T对(X−Xˉ)(X−Xˉ)T(X-\bar{X})(X-\bar{X})^T(X−Xˉ)(X−Xˉ)T进行特征值分解得:(X−Xˉ)(X−Xˉ)T=VΛVT(X-\bar{X})(X-\bar{X})^T=V\Lambda V^T(X−Xˉ)(X−Xˉ)T=VΛVT其中Λ=diag(λ1,λ2,...,λd),V=[v1,v2,...,vd]\Lambda=diag(\lambda_1,\lambda_2,...,\lambda_d), V=[v_1,v_2,...,v_d]Λ=diag(λ1​,λ2​,...,λd​),V=[v1​,v2​,...,vd​],得到的λ1,λ2,...,λd\lambda_1, \lambda_2,...,\lambda_dλ1​,λ2​,...,λd​就是CCC的ddd个特征值,VVV是特征值对应特征向量构成的矩阵。

注意:VVV的每一列代表一个特征向量。

我们对特征值进行排序,取前mmm个最大特征值所对应的特征向量即组成了最优投影矩阵:W=[v1,v2,...,vm]W=[v_1,v_2,...,v_m]W=[v1​,v2​,...,vm​]至此,我们就可以使用矩阵WWW对数据进行投影降维了。

2.3 主成分解

  • 第一主成分包含了样本方差的最大方向;
  • 第二主成分与第一主成分不相关(夹角90度),包含了剩余样本方差的最大方向;
  • 前几个主成分包含了样本的绝大部分信息,以至于可以忽略后面的主成分。

2.4 子空间、基和嵌入

  • 投影矩阵W=[w1,...,wm]W=[w_1,...,w_m]W=[w1​,...,wm​]是新的数据表征的坐标系集合,我们可以说WWW在样本空间中张了一个子空间
  • 向量wiw_iwi​定义一个样本的主成分,也定义新坐标系中第iii个坐标轴,称为WWW张成的子空间的一个
  • yi=WTxiy_i=W^Tx_iyi​=WTxi​是样本xix_ixi​在WWW张成的子空间中的一个低维嵌入

2.5 算法流程

  • 样本中心化:A=X−XˉA=X-\bar{X}A=X−Xˉ,其中Xˉ=[xˉ,xˉ,...,xˉ]∈Rd×n\bar{X}=[\bar{x},\bar{x},...,\bar{x}]∈\mathbb{R}^{d×n}Xˉ=[xˉ,xˉ,...,xˉ]∈Rd×n;
  • 计算协方差矩阵:C=AAT=(X−Xˉ)(X−Xˉ)TC=AA^T=(X-\bar{X})(X-\bar{X})^TC=AAT=(X−Xˉ)(X−Xˉ)T;
  • 特征值分解:C=VΛVTC=V\Lambda V^TC=VΛVT
  • 根据特征值选取特征向量构建投影矩阵:W=[v1,v2,...,vm]W=[v_1,v_2,...,v_m]W=[v1​,v2​,...,vm​]

注意:WWW对应VVV的前mmm列!(前提:特征值已排序!)

  • 输入原样本投影至新子空间完成降维:Y~=WTA\tilde{Y}=W^TAY~=WTA

使用奇异值分解(SVD)后:

  • 样本中心化:A=X−XˉA=X-\bar{X}A=X−Xˉ,其中Xˉ=[xˉ,xˉ,...,xˉ]∈Rd×n\bar{X}=[\bar{x},\bar{x},...,\bar{x}]∈\mathbb{R}^{d×n}Xˉ=[xˉ,xˉ,...,xˉ]∈Rd×n;
  • 奇异值分解:A=UΣVTA=U\Sigma V^TA=UΣVT
  • 根据奇异值选取奇异向量构建投影矩阵:W=[u1,u2,...,um]W=[u_1,u_2,...,u_m]W=[u1​,u2​,...,um​]

注意:WWW对应UUU的前mmm列!(前提:奇异值已排序!)

  • 输入原样本投影至新子空间完成降维:Y~=WTA\tilde{Y}=W^TAY~=WTA

问题:yyy的维度如何确定?

  • 固定值(分类问题设为类别数目-1);
  • 试错法(trial by error);
  • 设定特征值比重的阈值:max⁡m∑i=1mλi/∑i=1dλi≥h\max\limits_{m}\sum_{i=1}^m\lambda_i/\sum_{i=1}^d\lambda_i≥hmmax​∑i=1m​λi​/∑i=1d​λi​≥h;
  • 根据保留维度-精度的图像拐点(如下)。

2.6 小结

  • 核心思想:寻找合适的正交投影矩阵WWW,使得投影后的样本Y=WTXY=W^TXY=WTX方差最大,也就是说在新的空间中保留的信息越多越好。
  • 不足之处:存储、计算开销大;并未利用到监督信息

如何改进?

  • 减小存储、计算开销:奇异值分解(SVD)。A=UΣVTA=U\Sigma V^TA=UΣVT,其中A∈Rd×n,U∈Rd×r,Σ∈Rr×r,V∈Rn×rA∈\mathbb{R}^{d×n},U∈\mathbb{R}^{d×r},\Sigma∈\mathbb{R}^{r×r},V∈\mathbb{R}^{n×r}A∈Rd×n,U∈Rd×r,Σ∈Rr×r,V∈Rn×r,UUU和VVV都是正交矩阵,UUU中每个向量称为AAA的左奇异向量,VVV中每个向量称为AAA的右奇异向量,而Σ\SigmaΣ是一个对角方阵,且rrr等于AAA的秩。(更多请看这篇:求分解后的U,Σ,VU,\Sigma,VU,Σ,V三个矩阵的方法

  • 利用监督信息:线性判别分析(LDA)

3. 线性判别分析(LDA)

费希尔准则(Fisher Criteria):同类样本应该尽量聚合在一起,而不同类样本之间应该尽量扩散。如下图,即使得红线尽可能短,蓝线尽可能长。

如何定义聚合程度和扩散程度?
其实方差就可以实现!方差大,既可以表示聚合程度小,也可以表示扩散程度大!

3.1 同类样本的聚合程度

一维情况下(方差):sw(c)=∑i∈c(yi−μc)2s_w(c)=\sum\limits_{i∈c}(y_i-\mu_c)^2sw​(c)=i∈c∑​(yi​−μc​)2其中c∈[1,...,c,...,C]c∈[1,...,c,...,C]c∈[1,...,c,...,C],共CCC个类,μc=1nc∑i∈cyi\mu_c=\frac{1}{n_c}\sum\limits_{i∈c}y_iμc​=nc​1​i∈c∑​yi​是ccc类样本的中心。
多维情况下(协方差矩阵):sw(c)=tr(∑i∈c(yi−μc)(yi−μc)T)s_w(c)=tr(\sum\limits_{i∈c}(y_i-\mu_c)(y_i-\mu_c)^T)sw​(c)=tr(i∈c∑​(yi​−μc​)(yi​−μc​)T)

3.2 类别之间的扩散程度

sb=∑c=1Ctr((μc−μ)(μc−μ)T)s_b=\sum\limits_{c=1}^Ctr((\mu_c-\mu)(\mu_c-\mu)^T)sb​=c=1∑C​tr((μc​−μ)(μc​−μ)T)其中μc=1nc∑i∈cyi\mu_c=\frac{1}{n_c}\sum\limits_{i∈c}y_iμc​=nc​1​i∈c∑​yi​是ccc类样本中心,μ=1n∑iyi\mu=\frac{1}{n}\sum\limits_iy_iμ=n1​i∑​yi​是总样本中心。

3.3 目标函数

根据费希尔准则,yyy在一个理想的坐标系下应当满足:∀c,sw(c)↓,sb↑\forall c,s_w(c)↓,s_b↑∀c,sw​(c)↓,sb​↑故目标函数构建如下:min⁡∑csw(c)sb\min \frac{\sum_cs_w(c)}{s_b}minsb​∑c​sw​(c)​假设低维嵌入yyy由xxx通过投影矩阵WWW投影到LDA子空间,即:y=WTx,y∈Rm×1,x∈Rd×1,W∈Rd×my=W^Tx,\quad y∈\mathbb{R}^{m×1}, x∈\mathbb{R}^{d×1}, W∈\mathbb{R}^{d×m}y=WTx,y∈Rm×1,x∈Rd×1,W∈Rd×m则目标函数变为:min⁡Wtr(WTSwWWTSbW)\min_W tr(\frac{W^TS_wW}{W^TS_bW})Wmin​tr(WTSb​WWTSw​W​)该目标函数是SwS_wSw​和SbS_bSb​的广义瑞利商。其中类内散度矩阵SwS_wSw​和类间散度矩阵SbS_bSb​定义如下:Sw=∑c=1C∑i∈c(xi−xˉc)(xi−xˉc)T∈Rd×dS_w=\sum\limits_{c=1}^C\sum\limits_{i∈c}(x_i-\bar{x}_c)(x_i-\bar{x}_c)^T∈\mathbb{R}^{d×d}Sw​=c=1∑C​i∈c∑​(xi​−xˉc​)(xi​−xˉc​)T∈Rd×dSb=∑c=1Cnc(xˉc−xˉ)(xˉc−xˉ)T∈Rd×dS_b=\sum\limits_{c=1}^Cn_c(\bar{x}_c-\bar{x})(\bar{x}_c-\bar{x})^T∈\mathbb{R}^{d×d}Sb​=c=1∑C​nc​(xˉc​−xˉ)(xˉc​−xˉ)T∈Rd×d该目标函数的最优解有无穷多个,因为可以对WWW进行任意缩放。所以,我们可以认为该问题等价于:min⁡Wtr(WTSwW),s.t.,WTSbW=I\min_Wtr(W^TS_wW),\quad \text{s.t.},W^TS_bW=IWmin​tr(WTSw​W),s.t.,WTSb​W=I

3.4 问题求解

在PCA中已求解过类似问题,即构造拉格朗日函数求偏导,得到一个典型的特征值分解问题,故此处不再详述。

构造构造拉格朗日函数,并求偏导得到:Sb−1SwW=λWS_b^{-1}S_wW=\lambda WSb−1​Sw​W=λW同理,这也是一个特征值分解问题。

3.5 算法流程

  • 计算各类样本中心所有样本中心:μc=1nc∑i∈cyi,μ=1n∑iyi\mu_c=\frac{1}{n_c}\sum\limits_{i∈c}y_i,\quad\mu=\frac{1}{n}\sum\limits_iy_iμc​=nc​1​i∈c∑​yi​,μ=n1​i∑​yi​
  • 计算类间散度矩阵类内散度矩阵:Sw=∑c=1C∑i∈c(xi−xˉc)(xi−xˉc)T∈Rd×dS_w=\sum\limits_{c=1}^C\sum\limits_{i∈c}(x_i-\bar{x}_c)(x_i-\bar{x}_c)^T∈\mathbb{R}^{d×d}Sw​=c=1∑C​i∈c∑​(xi​−xˉc​)(xi​−xˉc​)T∈Rd×dSb=∑c=1Cnc(xˉc−xˉ)(xˉc−xˉ)T∈Rd×dS_b=\sum\limits_{c=1}^Cn_c(\bar{x}_c-\bar{x})(\bar{x}_c-\bar{x})^T∈\mathbb{R}^{d×d}Sb​=c=1∑C​nc​(xˉc​−xˉ)(xˉc​−xˉ)T∈Rd×d
  • 特征值分解:Sb−1SwW=λWS_b^{-1}S_wW=\lambda WSb−1​Sw​W=λW;
  • 根据特征值选取特征向量构建投影矩阵:W=[v1,v2,...,vm]W=[v_1,v_2,...,v_m]W=[v1​,v2​,...,vm​];
  • 输入原样本投影至新子空间完成降维:Y=WTXY=W^TXY=WTX

3.6 PCA vs LDA

思想上

  • PCA旨在寻找一组子坐标系(定义一个子空间)使得样本点的方差最大,即信息量保留最多
  • LDA旨在寻找一组子坐标系(定义一个子空间)使得样本点类内散度小,类间散度大(费希尔准则)。

监督性

  • PCA是无监督学习方法;
  • LDA是有监督学习方法。

子空间学习(subspace learning)角度

  • 两者都属于线性子空间学习算法,因为都在样本空间定义了一个新的子坐标系(子空间),每个列向量定义了一个坐标轴;
  • 目标都是学习一个投影矩阵WWW,使得样本在新坐标系上的表示具有相应特性;

降维(dimension reduction)角度

  • 两者都有降维的效果,坐标轴数目减少,维度减少。

特征提取(feature extraction)角度

  • 两者都起到了特征提取的作用,样本在新坐标系下的坐标就相当于样本的新特征(表征、表示)。

效率:PCA效率好于LDA。

4. 子空间学习的核化

想想:如果样本分布不是线性的,怎么办?
思路:把样本利用非线性映射投射到更高的维度(一般来说),使得在高维非线性空间,可以使用线性子空间学习进行数据分析。

然而,对于任意给定数据寻找合适的非线性映射ϕ\phiϕ是不现实的。
回顾一下,在支持向量机这篇文章中,我曾介绍过核方法(kernel trick),也就是我们定义核函数κ(xi,xj)=ϕ(xi)Tϕ(xj)\kappa(x_i,x_j)=\phi(x_i)^T\phi(x_j)κ(xi​,xj​)=ϕ(xi​)Tϕ(xj​),使得ϕ\phiϕ可以隐式地由核函数表示出来。只要满足Mercer条件(即核矩阵对称半正定)的函数就是核函数,因此核函数很容易找到,并且有了核函数后,内积的计算也变得十分方便。链接中的文章也介绍了常见的核函数。
在此,我们以PCA和LDA为例,对子空间学习进行核化。

机器学习——子空间学习(PCA LDA)相关推荐

  1. 【机器学习】基于PCA/LDA的数据降维和可视化(二维+三维)

    基于PCA/LDA的数据降维和可视化 Introduction Project Intro File Intro Tools Intro Code&Dataset Link Process P ...

  2. 模式识别与机器学习(作业5)基于PCA–LDA的人脸识别

    基于PCA–LDA的人脸识别 ORC数据集 提取码: cggh 本次的实验是在模式识别与机器学习(作业4),PCA降维的基础上加入了线性判别分析,对维度进行了进一步的降低. 1. 导入数据 一共有40 ...

  3. 机器学习Sklearn学习总结

    Sklearn学习资料推荐: sklearn中文文档 机器学习入门必看:使用 scikit-learn 构建模型的通用模板 机器学习神器Scikit-Learn保姆教程! python机器学习_FF_ ...

  4. SL-PCA(子空间学习模型)——前景提取

    目录 1.算法评价 2.综述 2.1 子空间学习方法的背景建模 3.Matlab code Paper: subspace learning for background modeling:a sur ...

  5. 《机器学习》学习笔记(三)——线性模型

    机器学习(Machine Learning)是一门多学科交叉专业,涵盖概率论知识,统计学知识以及复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式, 并将现有内容进行知识结构划分来有效 ...

  6. 2018年机器学习深度学习资料 全新汇总(不断更新),希望看到文章的朋友能够学到更多

    向AI转型的程序员都关注了这个号??? 大数据挖掘DT数据分析  公众号: datadw 注:机器学习资料篇目一共500条,篇目二开始更新 本文提到链接 请查看原文  https://github.c ...

  7. 机器学习线性回归学习心得_机器学习中的线性回归

    机器学习线性回归学习心得 机器学习中的线性回归 (Linear Regression in Machine Learning) There are two types of supervised ma ...

  8. andrew ng 机器学习笔记_所有笔记目录 | 数据分析 | 机器学习 | 深度学习等

    持续更新中... 机器学习模型Python复现: 舟晓南:感知机模型python复现 - 随机梯度下降法:梯度下降法:adagrad:对偶形式 舟晓南:k近邻(KNN)模型python复现 - 线性扫 ...

  9. 机器学习算法_机器学习算法之PCA算法

    前言 在机器学习中降维是我们经常需要用到的算法,在降维的众多方法中PCA无疑是最经典的机器学习算法之一,最近准备撸一个人脸识别算法,也会频繁用到PCA,本文就带着大家一起来学习PCA算法. 前置内容 ...

最新文章

  1. tiny210V2 Uboot kernel filesystem 烧写和启动
  2. 实现一个EventTarget类
  3. Java与.NET的WebServices相互调用
  4. 二元树中和为某一值的所有路径
  5. 海底捞涨价,有错吗?
  6. NoSQL介绍(七)
  7. c++排序函数_Excel2010 技巧六 (排名函数)
  8. 【转】vmware 安装 osx 无法登录 appstore 的解决办法 (伪造smbios设备信息)
  9. ASP.NET--窗体实现淡入淡出效果
  10. oracle 基础查询语句
  11. 通达信版弘历软件指标_[转载]弘历软件指标源码
  12. 计算机专业大学生买什么u盘合适,12款热销U盘横评:哪款U盘最值得买?
  13. Sklearn中的二分类模型可以进行多分类的原理
  14. 智牛股_第6章_Mybatis Generator代码生成器
  15. 点乘/内积/数量积;叉乘/向量积;矩阵乘法;哈达马积;克罗内克积;卷积
  16. 老程序员教你如何提高开发效率、成为大神4——快速学习方法
  17. 不重视,小程序将会带来大风险!——三大风险、隐私合规,小程序主该如何面对?
  18. Python+numpy画一幅纯颜色的灰度图,并将另一幅图片置于中间
  19. 【TJOI2017】DNA【后缀自动机】
  20. ASR长语音识别,基于vue2

热门文章

  1. 电脑硬盘丢失数据,硬盘数据恢复方法分享
  2. Vue使用UEditor百度编辑器,上传图片服务配置问题,查看版本
  3. AndroidX升级;项目升级AndroidX遇到的问题和解决;
  4. 下列字符是c语言的保留字是,下列字符序列中,是C语言保留字的是()。
  5. python requests 高级用法
  6. mysql5.6获取ipv6_linux环境下配置mysql5.6支持IPV6连接的方法
  7. 【大数据日记】【转】The world beyond batch: Streaming 101(第一节)
  8. 系统集成项目管理工程师(软考中级)—— 第十八章 合同管理 笔记分享
  9. python删除文件夹里损坏的图片
  10. 表达式必须包含指向对象的指针类型,但他具有“int“?