特征抽取与数据降维(LDA,SVD,PCA)

前言:本文详尽介绍 SVD、LDA、PCA等算法的基本原理和推导过程,以及简单实例的代码实现。补充了所需要的线性代数基础内容。仍旧有些坑待填。

特征抽取与数据降维(LDA,SVD,PCA)

  1. 线性判别分析(Linear Discriminate Analysis, LDA)

  2. 奇异值分解(Singular Value Decomposition, SVD)

  3. 主成分分析(Principal Component Analysis, PCA)

  4. 因子分析(FA)、独立成分分析(ICA)

线性代数基础

1. 正交矩阵 /幺正矩阵

如果 n 阶矩阵 A 满足
A T A = E     ( 即 A − 1 = A T ) A^TA=E \ \ \ (即A^{-1}=A^T) ATA=E   (A1=AT)
那么称 A 为正交矩阵,简称正交阵。

如果 A 中元素为复数的话,叫酋矩阵,或幺正矩阵,正交矩阵是幺正矩阵的特例。

2. 相似矩阵

AB 都是 n 阶矩阵,若有可逆矩阵 P ,使
P − 1 A P = B P^{-1}AP=B P1AP=B
则称 BA 的相似矩阵,或说 AB 相似。相似矩阵的特征值相同。

矩阵对角化 P − 1 A P = Λ = d i a g ( λ 1 , λ 2 , . . . , λ n ) P^{-1}AP=\Lambda=diag(\lambda_1,\lambda_2,...,\lambda_n) P1AP=Λ=diag(λ1,λ2,...,λn)

3. 对称矩阵/埃尔米特矩阵

  • 若对称矩阵的特征值互不相等,则对应的特征向量互相正交
  • 对于n 阶对称矩阵 A ,必存在正交阵 P ,使 P − 1 A P = P T A P = Λ P^{-1}AP=P^TAP=\Lambda P1AP=PTAP=Λ

实对称矩阵推广到复数域就是埃尔米特矩阵 (Hermitian Matrix)

具体定义为:埃尔米特矩阵中每一个第i 行第j 列的元素都与第j 行第i 列的元素的共轭相等。

表示为 A H = A A^H=A AH=A

4. 基变换与坐标变换

α 1 , α 2 , . . . , α n \alpha_1,\alpha_2,...,\alpha_n α1,α2,...,αn β 1 , β 2 , . . . , β n \beta_1,\beta_2,...,\beta_n β1,β2,...,βn 是线性空间 V n V_n Vn 中的两个基,有
[ β 1 β 2 ⋮ β n ] = [ p 11 p 21 ⋯ p n 1 p 12 p 22 ⋯ p n 2 ⋮ ⋮ ⋮ p 1 n p 2 n ⋯ p n n ] [ α 1 α 2 ⋮ α n ] = P T [ α 1 α 2 ⋮ α n ] (4-1) \left[ \begin{matrix} \beta_1 \\ \beta_2 \\ \vdots \\ \beta_n \end{matrix} \right]=\left[ \begin{matrix} p_{11} & p_{21} & \cdots & p_{n1} \\ p_{12} & p_{22} & \cdots & p_{n2} \\ \vdots & \vdots & & \vdots \\ p_{1n} & p_{2n} & \cdots & p_{nn} \end{matrix} \right] \left[ \begin{matrix} \alpha_1 \\ \alpha_2 \\ \vdots \\ \alpha_n \end{matrix} \right]=P^T \left[ \begin{matrix} \alpha_1 \\ \alpha_2 \\ \vdots \\ \alpha_n \end{matrix} \right] \tag{4-1} β1β2βn=p11p12p1np21p22p2npn1pn2pnnα1α2αn=PTα1α2αn(4-1)
或者
( β 1 , β 2 , ⋯   , β n ) = ( α 1 , α 2 , ⋯   , α n ) P P = ( α 1 , α 2 , ⋯   , α n ) − 1 ( β 1 , β 2 , ⋯   , β n ) (4-2) (\beta_1,\beta_2,\cdots,\beta_n) = (\alpha_1,\alpha_2,\cdots,\alpha_n)P \tag{4-2} \\ P=(\alpha_1,\alpha_2,\cdots,\alpha_n)^{-1}(\beta_1,\beta_2,\cdots,\beta_n) (β1,β2,,βn)=(α1,α2,,αn)PP=(α1,α2,,αn)1(β1,β2,,βn)(4-2)
那么,矩阵 P 称为由基 α 1 , α 2 , . . . , α n \alpha_1,\alpha_2,...,\alpha_n α1,α2,...,αn β 1 , β 2 , . . . , β n \beta_1,\beta_2,...,\beta_n β1,β2,...,βn 的过渡矩阵。
若线性空间一个元素 a,在基 α 1 , α 2 , ⋯   , α n \alpha_1,\alpha_2,\cdots,\alpha_n α1,α2,,αn 下坐标为 ( x 1 , x 2 , ⋯   , x n ) T (x_1,x_2,\cdots,x_n)^T (x1,x2,,xn)T ,在基 β 1 , β 2 , . . . , β n \beta_1,\beta_2,...,\beta_n β1,β2,...,βn 下坐标为 ( x 1 ′ , x 2 ′ , ⋯   , x n ′ ) T (x'_1,x'_2,\cdots,x'_n)^T (x1,x2,,xn)T ,若两基满足关系式(2),则有坐标变换公式
[ x 1 x 2 ⋮ x n ] = P [ x 1 ′ x 2 ′ ⋮ x n ′ ] = = ( α 1 , α 2 , ⋯   , α n ) − 1 ( β 1 , β 2 , ⋯   , β n ) [ x 1 ′ x 2 ′ ⋮ x n ′ ] \left[ \begin{matrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{matrix} \right] =P \left[ \begin{matrix} x'_1 \\ x'_2 \\ \vdots \\ x'_n \end{matrix} \right]== (\alpha_1,\alpha_2,\cdots,\alpha_n)^{-1}(\beta_1,\beta_2,\cdots,\beta_n) \left[ \begin{matrix} x'_1 \\ x'_2 \\ \vdots \\ x'_n \end{matrix} \right] x1x2xn=Px1x2xn==(α1,α2,,αn)1(β1,β2,,βn)x1x2xn

更一般情况,我们知道基 α 1 , α 2 , ⋯   , α n \alpha_1,\alpha_2,\cdots,\alpha_n α1,α2,,αn (且通常 α i = ( 0 , 0 , ⋯   , 1 , ⋯ 0 , 0 ) \alpha_i=(0,0,\cdots,1,\cdots0,0) αi=(0,0,,1,0,0))和其下的坐标表示 ( x 1 , x 2 , ⋯   , x n ) T (x_1,x_2,\cdots,x_n)^T (x1,x2,,xn)T ,求在基 β 1 , β 2 , . . . , β n \beta_1,\beta_2,...,\beta_n β1,β2,...,βn 下的坐标表示

x ′ = [ x 1 ′ x 2 ′ ⋮ x n ′ ] = ( β 1 , β 2 , ⋯   , β n ) − 1 [ x 1 x 2 ⋮ x n ] = W − 1 x (4-3) x'= \left[ \begin{matrix} x'_1 \\ x'_2 \\ \vdots \\ x'_n \end{matrix} \right]= (\beta_1,\beta_2,\cdots,\beta_n)^{-1} \left[ \begin{matrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{matrix} \right] =W^{-1}x \tag{4-3} x=x1x2xn=(β1,β2,,βn)1x1x2xn=W1x(4-3)

举例说明:
二维坐标点 a 在基 α 1 = ( 1 , 0 ) T , α 2 = ( 0 , 1 ) T \alpha_1=(1,0)^T, \alpha_2=(0,1)^T α1=(1,0)T,α2=(0,1)T 下坐标为 ( 1 , 1 ) T (1,1)^T (1,1)T,则在基 β 1 = ( 2 2 , 2 2 ) T , β 2 = ( − 2 2 , 2 2 ) T \beta_1=(\frac{\sqrt2}{2},\frac{\sqrt2}{2})^T,\beta_2=(-\frac{\sqrt2}{2},\frac{\sqrt2}{2})^T β1=(22 ,22 )T,β2=(22 ,22 )T 下坐标为 a ′ ( x 1 ′ , x 2 ′ ) a'(x_1',x_2') a(x1,x2)

首先,根据式(2)
[ 2 2 − 2 2 2 2 2 2 ] = P [ 1 0 0 1 ] \left[ \begin{matrix} \frac{\sqrt2}{2} & - \frac{\sqrt2}{2}\\ \frac{\sqrt2}{2} & \frac{\sqrt2}{2} \end{matrix} \right]=P \left[ \begin{matrix} 1 & 0\\ 0 & 1 \end{matrix} \right] [22 22 22 22 ]=P[1001]

[ x 1 ′ x 2 ′ ] = [ 1 0 0 1 ] [ 2 2 − 2 2 2 2 2 2 ] − 1 [ 1 1 ] = [ 2 0 ] \left[ \begin{matrix} x'_1 \\ x'_2 \\ \end{matrix} \right]= \left[ \begin{matrix} 1 & 0\\ 0 & 1 \end{matrix} \right] \left[ \begin{matrix} \frac{\sqrt2}{2} & - \frac{\sqrt2}{2}\\ \frac{\sqrt2}{2} & \frac{\sqrt2}{2} \end{matrix} \right]^{-1} \left[ \begin{matrix} 1 \\ 1 \\ \end{matrix} \right]= \left[ \begin{matrix} \sqrt2 \\ 0 \\ \end{matrix} \right] [x1x2]=[1001][22 22 22 22 ]1[11]=[2 0]

图示:

在这里插入图片描述

5. 投影矩阵

若使用 A = ( α 1 , α 2 , ⋯   , α m ) A=(\alpha_1,\alpha_2,\cdots,\alpha_m) A=(α1,α2,,αm) 表示投影面(一个线性子空间或其平移),那么到该面的投影矩阵可表示为
P = A ( A T A ) − 1 A T P=A(A^TA)^{-1}A^T P=A(ATA)1AT

证明如下:

C n C^n Cn 的线性空间中,求解 b 在 A = ( α 1 , α 2 , ⋯   , α m ) A=(\alpha_1,\alpha_2,\cdots,\alpha_m) A=(α1,α2,,αm) 的投影 p

首先,p 可以由 A 表示 p = A x ^ p = A\hat x p=Ax^
( b − p ) ⊥ c o l ( A ) ⇒ A T ( b − p ) = 0 ⇒ A T ( b − A x ^ ) = 0 ⇒ A T A x ^ = A T b ⇒ x = ( A T A ) − 1 A T b ⇒ A x = A ( A T A ) − 1 A T b ⇒ p = A ( A T A ) − 1 A T b ⇒ p = P b h e r e , P = A ( A T A ) − 1 A T (5-1) \begin{aligned} &(b-p) \perp col(A) \\ \Rightarrow &A^T(b-p) = 0 \\ \Rightarrow &A^T(b-A\hat x)=0 \\ \Rightarrow &A^TA\hat x = A^Tb \\ \Rightarrow &x=(A^TA)^{-1}A^Tb \\ \Rightarrow &Ax = A(A^TA)^{-1}A^Tb \\ \Rightarrow &p = A(A^TA)^{-1}A^Tb \\ \Rightarrow &p=Pb \\ here, &P=A(A^TA)^{-1}A^T \end{aligned} \tag{5-1} here,(bp)col(A)AT(bp)=0AT(bAx^)=0ATAx^=ATbx=(ATA)1ATbAx=A(ATA)1ATbp=A(ATA)1ATbp=PbP=A(ATA)1AT(5-1)

举例说明:

在三维坐标系中有两点 ( 1 , 1 , 0 ) T (1,1,0)^T (1,1,0)T ( 5 , 5 , 4 ) T (5,5,4)^T (5,5,4)T ,将由两点组成的向量 b= ( 4 , 4 , 4 ) T (4,4,4)^T (4,4,4)T 投影到 xy 平面得到 p

首先,投影平面 xy 可以由两个线性无关的两个向量 α 1 , α 2 \alpha_1,\alpha_2 α1,α2 表示

α 1 = ( 1 , 0 , 0 ) T \alpha_1 = (1,0,0)^T α1=(1,0,0)T , α 2 = ( 0 , 1 , 0 ) T \alpha_2 = (0,1,0)^T α2=(0,1,0)T ,则
A = [ α 1   α 2 ] = [ 1 0 0 1 0 0 ] A=[\alpha_1\ \alpha_2]= \left[ \begin{matrix} 1 & 0\\ 0 & 1 \\ 0 & 0 \\ \end{matrix} \right] A=[α1 α2]=100010
投影矩阵 P
P = A ( A T A ) − 1 A T = [ 1 0 0 0 1 0 0 0 0 ] P=A(A^TA)^{-1}A^T=\left[ \begin{matrix} 1&0&0\\ 0&1&0\\ 0&0&0\\ \end{matrix} \right] P=A(ATA)1AT=100010000
则投影得到的 p 为
p = P b = [ 1 0 0 0 1 0 0 0 0 ] [ 4 4 4 ] = [ 4 4 0 ] p=Pb = \left[ \begin{matrix} 1&0&0\\ 0&1&0\\ 0&0&0\\ \end{matrix} \right] \left[ \begin{matrix} 4\\ 4\\ 4\\ \end{matrix} \right] =\left[ \begin{matrix} 4\\ 4\\ 0\\ \end{matrix} \right] p=Pb=100010000444=440
图示:

在这里插入图片描述

投影矩阵的性质:
P T = P P 2 = P P^T=P\\ P^2=P PT=PP2=P

投影其实是跟基变换和坐标变换是等价、共通的。 W W W 与 P 也是等价的,不同之处在于,P 是更体现了降维度的一面,即将数据拍扁在了映射坐标系上,具体途径是设置其余未参与的轴的基坐标为 ( 0 , 0 , ⋯   , 0 ) (0,0,\cdots,0) (0,0,,0) ,W 则是全维度的坐标变换。所以基于将维问题所说的投影跟坐标变换是等价的。

6. 协方差矩阵

方差用来度量单个随机变量的离散程度。总体方差定义为
σ 2 = 1 N ∑ ( X − μ ) 2 \sigma^2 = \frac{1}{N}\sum(X-\mu)^2 σ2=N1(Xμ)2
基于无偏估计,样本方差定义为
S 2 = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) 2 S^2=\frac{1}{n-1}\sum\limits_{i=1}^n(x_i-\bar x)^2 S2=n11i=1n(xixˉ)2
协方差用来刻画两个随机变量的相似程度,定义为
C o v ( X , Y ) = E [ ( X − E ( X ) ( Y − E ( Y ) ] c o v ( x , y ) = 1 n − 1 ∑ i = 1 n ( x i − x ˉ i ) ( y i − x ˉ j ) Cov(X,Y) = E[(X-E(X)(Y-E(Y)] \\ cov(x,y) = \frac{1}{n-1}\sum\limits_{i=1}^n(x_i-\bar x_i)(y_i-\bar x_j) Cov(X,Y)=E[(XE(X)(YE(Y)]cov(x,y)=n11i=1n(xixˉi)(yixˉj)
注意前面系数 1 n − 1 \frac{1}{n-1} n11 由于是常数,在分析时,直接用作了 1 n \frac{1}{n} n1 ,不影响结果。

而且,去掉前面的系数项
S c a t t e r = ∑ i = 1 n ( x i − x ˉ i ) ( y i − x ˉ j ) Scatter = \sum\limits_{i=1}^n(x_i-\bar x_i)(y_i-\bar x_j) Scatter=i=1n(xixˉi)(yixˉj)
称其为散度。

方差可以视为随机变量关于自身的协方差
C o v ( X , X ) = σ 2 Cov(X,X) = \sigma^2 Cov(X,X)=σ2

给定 l l l 个随机变量 x 1 , x 2 , . . . , x l x_1,x_2,...,x_l x1,x2,...,xl ,一共 m m m 个观测样本,若用 x k i x_{ki} xki 表示第 k k k 个观测样本中随机变量 x i x_i xi 的值。

可以用矩阵表示(m行代表第m个样本数据,n列表示第n个随机变量)
X = [ x 11 x 12 ⋯ x 1 l x 21 x 22 ⋯ x 2 l ⋮ ⋮ ⋱ ⋮ x m 1 x m 2 ⋯ x m l ] (6-1) X= \left[ \begin{matrix} x_{11} & x_{12} & \cdots & x_{1l} \\ x_{21} & x_{22} & \cdots & x_{2l} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m1} & x_{m2} & \cdots & x_{ml} \\ \end{matrix} \right] \tag{6-1} X=x11x21xm1x12x22xm2x1lx2lxml(6-1)
则任意两个随机变量 x i , x j x_i,x_j xi,xj 间的协方差为
c o v ( x i , x j ) = 1 m ∑ k = 1 m ( x k i − μ i ) ( x k j − μ j ) cov(x_i,x_j) = \frac{1}{m} \sum\limits_{k=1}^m(x_{ki}-\mu_i)(x_{kj}-\mu_j) cov(xi,xj)=m1k=1m(xkiμi)(xkjμj)
一般可以通过数据的预处理,使得随机变量样本均值 x ˉ i = 0 \bar x_i=0 xˉi=0

此时有
c o v ( x i , x j ) = 1 m ∑ k = 1 m x k i x k j (6-2) cov(x_i,x_j) = \frac{1}{m} \sum\limits_{k=1}^m x_{ki}x_{kj}\tag{6-2} cov(xi,xj)=m1k=1mxkixkj(6-2)
其实此时,求和项就是 X T X X^TX XTX 的第 i 行 j 列 元素,后面的协方差矩阵就可以用 X T X X^TX XTX 来表示。

举例说明:

样本编号年龄 x 1 x_1 x1身高 $x_2 $体重 x 3 x_3 x3
12018175
24017760
31515646
43317057

可以写成矩阵形式
X = [ 20 181 75 40 177 60 15 156 46 33 170 57 ] X= \left[ \begin{matrix} 20 & 181 & 75 \\ 40 & 177 & 60 \\ 15 & 156 & 46 \\ 33 & 170 & 57 \\ \end{matrix} \right] X=2040153318117715617075604657
则两个变量协方差为
c o v ( x 1 , x 2 ) = 1 4 [ ( 20 − x ˉ 1 ) ( 181 − x ˉ 2 ) + ( 40 − x ˉ 1 ) ( 177 − x ˉ 2 ) + ( 15 − x ˉ 1 ) ( 156 − x ˉ 2 ) + ( 33 − x ˉ 1 ) ( 170 − x ˉ 2 ) ] cov(x_1,x_2)=\frac{1}{4}[(20-\bar x_1)(181-\bar x_2)+(40-\bar x_1)(177-\bar x_2)+(15-\bar x_1)(156-\bar x_2)+(33-\bar x_1)(170-\bar x_2)] cov(x1,x2)=41[(20xˉ1)(181xˉ2)+(40xˉ1)(177xˉ2)+(15xˉ1)(156xˉ2)+(33xˉ1)(170xˉ2)]
其余任意两个变量间求解类似。

定义协方差矩阵为
∑ = [ c o v ( x 1 , x 1 ) c o v ( x 1 , x 2 ) ⋯ c o v ( x 1 , x l ) c o v ( x 2 , x 1 ) c o v ( x 2 , x 2 ) ⋯ c o v ( x 2 , x l ) ⋮ ⋮ ⋱ ⋮ c o v ( x l , x 1 ) c o v ( x l , x 2 ) ⋯ c o v ( x l , x l ) ] (6-3) \sum = \left[ \begin{matrix} cov(x_1,x_1) & cov(x_1,x_2) & \cdots & cov(x_1,x_l) \\ cov(x_2,x_1) & cov(x_2,x_2) & \cdots & cov(x_2,x_l) \\ \vdots & \vdots & \ddots & \vdots \\ cov(x_l,x_1) & cov(x_l,x_2) & \cdots & cov(x_l,x_l) \end{matrix} \right] \tag{6-3} =cov(x1,x1)cov(x2,x1)cov(xl,x1)cov(x1,x2)cov(x2,x2)cov(xl,x2)cov(x1,xl)cov(x2,xl)cov(xl,xl)(6-3)
如果经过了上述的均值预处理,就有
∑ = 1 m X T X \sum = \frac{1}{m} X^TX =m1XTX
很明显,协方差矩阵是对称矩阵。

值得注意的一点是
t r ( ∑ ) = c o v ( x 1 , x 1 ) + c o v ( x 2 , x 2 ) + ⋯ + c o v ( x l , x l ) = σ 1 2 + σ 2 2 + ⋯ + σ l 2 (6-4) tr(\sum) = cov(x_1,x_1)+cov(x_2,x_2)+\cdots+cov(x_l,x_l)=\sigma_1^2+\sigma_2^2+\cdots+\sigma_l^2 \tag{6-4} tr()=cov(x1,x1)+cov(x2,x2)++cov(xl,xl)=σ12+σ22++σl2(6-4)
也就是协方差矩阵的对角和等于各个随机变量的方差和。

(说明:一般情况,在用X矩阵表示数据时,一般是每个样本的数据作为列向量,也就是上述 X 的转置,下面就按照常规写法书写,上述不再更正)

7. 矩阵求导

(挖坑:推导过程参考矩阵论相关)
∂ ∂ X ( t r ( B X ) ) = ∂ ∂ X ( t r ( X T B T ) ) = B T ∂ ∂ X ( t r ( X T A X ) ) = ( A + A T ) X \frac{\partial}{\partial X} (tr(BX)) = \frac{\partial}{\partial X} (tr(X^T B^T)) = B^T \\\frac{\partial}{\partial X} (tr(X^T A X)) = (A+A^T)X X(tr(BX))=X(tr(XTBT))=BTX(tr(XTAX))=(A+AT)X

8. 瑞利熵

瑞利熵

若 x 为非零向量,A 为 n 阶 Hermitian 矩阵,则
R ( A , x ) = x H A x x H x R(A,x) = \frac{x^HAx}{x^Hx} R(A,x)=xHxxHAx
称作瑞利熵(Rayleigh quotient)。

两条很重要的性质:

  • R(A, x) 最大值为矩阵 A 最大特征值
  • R(A, x) 最小值为矩阵 A 最小特征值

λ m i n ≤ R ( A , x ) ≤ λ m a x \lambda_{min} \leq R(A,x)\leq\lambda_{max} λminR(A,x)λmax

证明:

实际问题中,一般 A 是给定的。对 x 放大缩小不影响其结果,转化为最优化问题(以最大化为例)
m a x   x H A x s . t .    x H x = c o n s t max\ x^HAx \\s.t. \ \ x^Hx=const max xHAxs.t.  xHx=const
利用拉格朗日乘子法,构造拉格朗日函数
f ( x , λ ) = x H A x − λ ( x H x − c ) f(x,\lambda) = x^HAx- \lambda(x^Hx - c) f(x,λ)=xHAxλ(xHxc)
求极值
∂ f ( x , λ ) ∂ x = 0 ⇒ 2 A x − 2 λ x = 0 ⇒ A x = λ x \frac{\partial f(x,\lambda)}{\partial x} = 0 \Rightarrow 2Ax - 2\lambda x = 0 \Rightarrow Ax=\lambda x xf(x,λ)=02Ax2λx=0Ax=λx

带入到最优化问题中
m a x   x H A x ⇒ m a x   λ x H x ⇒ m a x   c λ max\ x^HAx \Rightarrow max\ \lambda x^H x \Rightarrow max\ c\lambda max xHAxmax λxHxmax cλ
如果考虑瑞利熵的分母,则 m a x   x H x x H x = m a x   λ max\ \frac{x^Hx}{x^Hx}=max\ \lambda max xHxxHx=max λ 。可以看出,瑞利熵的最值问题就是求解 λ \lambda λ 的最值问题,且 λ \lambda λ 为 A 的特征值,x 为其对应的特征向量。

说明:PCA 推导得到的最优化问题就是 瑞利熵问题。

额外可参考:瑞利商与极值计算

广义瑞利熵

若 x 为非零向量,A,B为 n 阶 Hermitian 矩阵,则
R ( A , B , x ) = x H A x x H B x R(A,B,x) = \frac{x^HAx}{x^HBx} R(A,B,x)=xHBxxHAx
称为广义瑞利熵(generalized Rayleigh quotient)

想法将广义情况想一般瑞利熵转化,即将分母转化为 x ′ H x ′ x'^Hx' xHx 形式,也即消掉 B,找到 x ‘ x‘ x x x x 的关系。
B = ( B 1 2 ) 2 = ( B 1 2 ) H ( B 1 2 ) B=(B^{\frac{1}{2}})^2=(B^{\frac{1}{2}})^H(B^{\frac{1}{2}}) B=(B21)2=(B21)H(B21)
则对于分母
x H B x = x H ( B 1 2 ) H ( B 1 2 ) x = ( B 1 2 x ) H ( B 1 2 x ) x^HBx=x^H(B^{\frac{1}{2}})^H(B^{\frac{1}{2}})x=(B^{\frac{1}{2}}x)^H(B^{\frac{1}{2}}x) xHBx=xH(B21)H(B21)x=(B21x)H(B21x)

x ′ = ( B 1 2 x ) ⇒ x = B − 1 2 x ′ x'=(B^{\frac{1}{2}}x) \Rightarrow x=B^{-\frac{1}{2}}x' x=(B21x)x=B21x

x H B x = x ′ H x x H A x = ( B − 1 2 x ′ ) H A ( B − 1 2 x ′ ) = x ′ H ( B − 1 2 ) H A ( B − 1 2 ) x ′ = x ′ H ( B − 1 2 A B − 1 2 ) x ′ x^HBx=x'^Hx \\x^HAx=(B^{-\frac{1}{2}}x')^HA(B^{-\frac{1}{2}}x')=x'^H(B^{-\frac{1}{2}})^HA(B^{- \frac{1}{2}})x'=x'^H(B^{-\frac{1}{2}}AB^{- \frac{1}{2}})x' xHBx=xHxxHAx=(B21x)HA(B21x)=xH(B21)HA(B21)x=xH(B21AB21)x
广义瑞利熵转换为
R ( A , B , x ′ ) = x ′ H ( B − 1 2 A B − 1 2 ) x ′ x ′ H x R(A,B,x') =\frac{x'^H(B^{-\frac{1}{2}}AB^{- \frac{1}{2}})x'}{x'^Hx} R(A,B,x)=xHxxH(B21AB21)x
这就是一般瑞利熵问题,有

  • R(A, B, x) 最大值为矩阵 B − 1 2 A B − 1 2 B^{-\frac{1}{2}}AB^{- \frac{1}{2}} B21AB21 最大特征值
  • R(A, B, x) 最小值为矩阵 B − 1 2 A B − 1 2 B^{-\frac{1}{2}}AB^{- \frac{1}{2}} B21AB21 最小特征值

注意: B − 1 2 A B − 1 2 = B − 1 A B^{- \frac{1}{2}}AB^{- \frac{1}{2}} = B^{-1}A B21AB21=B1A

说明:LDA 推导得到的最优化问题就是 广义瑞利熵问题。

奇异值分解(Singular Value Decomposition, SVD)

1. 正交对角分解

A ∈ R n × n \in R^{n\times n} Rn×n 可逆,则存在正交矩阵 PQ ,使得
P T A Q = Λ = d i a g ( σ 1 , σ 2 , ⋯   , σ n ) P^TAQ=\Lambda=diag(\sigma_1,\sigma_2,\cdots,\sigma_n) PTAQ=Λ=diag(σ1,σ2,,σn)

证明:

因为A可逆,则 A T A A^TA ATA 为实对称正定矩阵,则存在正交矩阵 Q,使
Q T ( A T A ) Q = d i a g ( λ 1 , λ 2 , ⋯   , λ n ) Q^T(A^TA)Q=diag(\lambda_1,\lambda_2,\cdots,\lambda_n) QT(ATA)Q=diag(λ1,λ2,,λn)
其中, λ i > 0 \lambda_i>0 λi>0 A T A A^TA ATA 的特征值,且令 σ i = λ i ,    Λ = d i a g ( λ 1 , λ 2 , ⋯   , λ n ) \sigma_i = \sqrt \lambda_i,\ \ \Lambda=diag(\lambda_1,\lambda_2,\cdots,\lambda_n) σi=λ i,  Λ=diag(λ1,λ2,,λn)

可以得到
( A Q Λ − 1 ) T ( A Q ) = Λ (AQ\Lambda^{-1})^T(AQ)=\Lambda (AQΛ1)T(AQ)=Λ
P = A Q Λ − 1 P=AQ\Lambda^{-1} P=AQΛ1 ,很容易得到
P T P = E P^TP=E PTP=E
即 P 为正交矩阵

得证。

矩阵 A 的正交对角分解可表示为
A = P ⋅ d i a g ( σ 1 , σ 2 , ⋯   , σ n ) ⋅ Q T = P ⋅ d i a g ( λ 1 , λ 2 , ⋯   , λ n ) ⋅ Q T A=P \cdot diag(\sigma_1,\sigma_2,\cdots,\sigma_n) \cdot Q^T = P \cdot diag(\sqrt\lambda_1,\sqrt\lambda_2,\cdots,\sqrt\lambda_n) \cdot Q^T A=Pdiag(σ1,σ2,,σn)QT=Pdiag(λ 1,λ 2,,λ n)QT
其中,P, Q 均为正交矩阵, λ i \lambda_i λi A T A A^TA ATA 的特征值。

2. 奇异值分解

A ∈ C R m × n \in C_R^{m\times n} CRm×n A T A A^TA ATA 的特征值为
λ 1 ≥ λ 2 ≥ ⋯ ≥ λ r ≥ ⋯ ≥ λ n = 0 \lambda_1\geq\lambda_2\geq\cdots\geq\lambda_r\geq\cdots\geq\lambda_n=0 λ1λ2λrλn=0
σ i = λ i \sigma_i=\sqrt \lambda_i σi=λ i 为矩阵 A 的奇异值。

A 存在 m 阶酋矩阵 U 和 n 阶酋矩阵 V ,使得
U H A V = [ ∑ 0 0 0 ] U^HAV= \left[ \begin{matrix} \sum & 0 \\ 0 & 0 \\ \end{matrix} \right] UHAV=[000]
或者写作
A = U [ ∑ 0 0 0 ] V H (*) A = U \left[ \begin{matrix} \sum & 0 \\ 0 & 0 \\ \end{matrix} \right] V^H \tag{*} A=U[000]VH(*)
其中
∑ = d i a g ( σ 1 , σ 2 , ⋯   , σ r ) = d i a g ( λ 1 , λ 2 , ⋯   , λ r ) \sum=diag(\sigma_1,\sigma_2,\cdots,\sigma_r)=diag(\sqrt\lambda_1,\sqrt\lambda_2,\cdots,\sqrt\lambda_r) =diag(σ1,σ2,,σr)=diag(λ 1,λ 2,,λ r)
称 (*)为矩阵 A 的奇异值分解。证明过程与正交分解有类似之处,省略。

求解:

对于任意矩阵 A,
A A T = ( U Σ V T ) ⋅ ( V Σ U T ) = U Σ 2 U − 1 AA^T=(U\Sigma V^T)\cdot(V\Sigma U^T)=U\Sigma^2 U^{-1} AAT=(UΣVT)(VΣUT)=UΣ2U1
即: A A T AA^T AAT 求特征值和特征向量,得到特征向量矩阵 U(列),特征值矩阵 Σ 2 \Sigma^2 Σ2
A T A = ( V Σ U T ) ⋅ ( U Σ V T ) = V Σ 2 V − 1 A^TA =(V\Sigma U^T)\cdot(U\Sigma V^T)=V\Sigma^2 V^{-1} ATA=(VΣUT)(UΣVT)=VΣ2V1
即: A T A A^TA ATA 求特征值和特征向量,得到特征向量矩阵 V(列),特征值矩阵 Σ 2 \Sigma^2 Σ2

实例:
A = [ 1 0 1 0 1 1 0 0 0 ] A=\left[ \begin{matrix} 1&0&1\\ 0&1&1\\ 0&0&0 \end{matrix} \right] A=100010110
对矩阵 A 进行 SVD 分解。

import matplotlib.pyplot as plt
import numpy as np

a = np.array([[1,0,1],[0,1,1],[0,0,0]])
b = np.dot(a.T,a)   # a.T*a
c = np.dot(a,a.T)   # a*a.T
b1 = np.linalg.eig(b)
c1 = np.linalg.eig(c)

sigma1 = np.sqrt(c1[0][0])
sigma2 = np.sqrt(c1[0][1])
sigma3 = np.sqrt(c1[0][2])

Sigma = np.diag([sigma1,sigma2,sigma3])

V = b1[1]
U = c1[1]
U[:,1] = -U[:,1]
V = -V

print("sigma_u = ", np.sqrt(c1[0]))
print("sigma_v = ", np.sqrt(b1[0]))
print("U=", U)
print("V=", V)

A = np.dot(np.dot(U,Sigma),V.T)
print("a=", a)
print("A=", A)

# 使用python自带的svd
u,s,v = np.linalg.svd(a)
print("u = ", u, "\ns = ", s, "\nv = ", v)

result :

在这里插入图片描述

注意事项:

  1. U,V 不唯一
  2. 自编程时注意U,V两个特征值可能不是按照同一顺序排列,特征向量也存在正负号的问题
  3. 由于特征向量正负号的原因,在进行验证时,尤其要注意,往往直接求解得到的 U S V T ≠ A USV^T \neq A USVT=A

参考:

  1. SVD分解

  2. 《矩阵论》

主成分分析(Principal Component Analysis, PCA)

总体概括

  • 基于方差,PCA 轴正交
  • 无监督(不需要标签)
  • 优点:降低数据复杂度,识别最重要的多个特征,可以降低到任意维度
  • 缺点:可能损失掉有用信息

问题引入

假设有如下 4随机变量,6个样本数据(数据比较极端,但能很好说明 PCA 的思想),通过这四个变量预测某件事y.

样本编号 x 1 x_1 x1 x 2 x_2 x2 x 3 x_3 x3 x 4 x_4 x4
110010-10
223010-23
376010-76
413010-13
519010-19
699010-9

事实上,很容易可以看出来,这么多随机变量,其实只有一个是有贡献的。

对于随机变量 x 2 , x 3 x_2,x_3 x2,x3 来讲,对预测不起作用,对于 x 1 , x 4 x_1,x_4 x1,x4 ,两者其实是协同的。

那么如何过滤掉 x 2 , x 3 x_2,x_3 x2,x3 这种数据呢,基本想法是考察其方差。如何表现 x 1 , x 4 x_1,x_4 x1,x4 的这种协同关系呢,可以通过线性组合变换对这种数据进行考察。

什么是 PCA ?
在这里插入图片描述
对原始数据进行坐标转换,找到指定维度中最能够表征数据信息的 PCA 轴,来用此表征原始数据,达到降维的目的。

推导过程

0. 条件

给定 l l l 个随机变量 x 1 , x 2 , . . . , x l x_1,x_2,...,x_l x1,x2,...,xl ,一共 m m m 个观测样本,若用 x i k x_{ik} xik 表示第 k k k 个观测样本中第 i 个随机变量的值

用矩阵表示即为 (这里不同于前面表示,这种是常规表示,列向量为每个样本中的数据,行向量为同一随机变量在不同样本中的数据)
X = [ x 1 x 2 ⋯ x m ] = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x l 1 x l 2 ⋯ x l m ] (*1) X=\left[ \begin{matrix} x_{1} & x_{2} & \cdots & x_{m} \\ \end{matrix} \right]= \left[ \begin{matrix} x_{11} & x_{12} & \cdots & x_{1m} \\ x_{21} & x_{22} & \cdots & x_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ x_{l1} & x_{l2} & \cdots & x_{lm} \end{matrix} \right] \tag{*1} X=[x1x2xm]=x11x21xl1x12x22xl2x1mx2mxlm(*1)

这里,一般会对样本进行中心化处理,也即 μ i = 0 \mu_i=0 μi=0

投影变换坐标系 W = ( w 1 , w 2 , ⋯   , w l ) W = (w_1,w_2,\cdots,w_l) W=(w1,w2,,wl) ,由标准正交基向量组成。

变换后的坐标为
X ′ = [ w 1 w 2 ⋮ w l ] [ x 1 x 2 ⋯ x m ] = [ w 1 T x 1 w 1 T x 2 ⋯ w 1 T x m w 2 T x 1 w 2 T x 2 ⋯ w 2 T x m ⋮ ⋮ ⋱ ⋮ w l T x 1 w l T x 2 ⋯ w l T x m ] (*2) X'= \left[ \begin{matrix} w_{1} \\ w_{2} \\ \vdots \\ w_{l} \end{matrix} \right] \left[ \begin{matrix} x_{1} & x_{2} & \cdots & x_{m} \\ \end{matrix} \right]=\left[ \begin{matrix} w_1^Tx_{1} & w_1^Tx_{2} & \cdots & w_1^Tx_{m} \\ w_2^Tx_{1} & w_2^Tx_{2} & \cdots & w_2^Tx_{m} \\ \vdots & \vdots & \ddots & \vdots \\ w_l^Tx_{1} & w_l^Tx_{2} & \cdots & w_l^Tx_{m} \end{matrix} \right] \tag{*2} X=w1w2wl[x1x2xm]=w1Tx1w2Tx1wlTx1w1Tx2w2Tx2wlTx2w1Txmw2TxmwlTxm(*2)

1. 思路
  • 基于最近重构性:所有样本点距离投影超平面距离和最近
  • 基于最大可分性:所有样本点投影后尽可能分开
基于最近重构性

求解原始点与投影超平面距离和,然后最小化即可。

根据(4-3)我们知道,新坐标系 W 下,样本点坐标为 W − 1 X W^{-1}X W1X 因为 W 是单位正交基, W − 1 = W T W^{-1}=W^T W1=WT ,新坐标下样本点坐标为 W T X W^TX WTX ,如上所示。

第 k 个样本点坐标为 W T x k W^Tx_k WTxk ,第 k 个样本点第 i 个随机变量(维度)在新坐标系下值为 W T x k i W^Tx_{ki} WTxki,而该值(的绝对值)其实就是新坐标下第 k 样本点与除去 i 维坐标后的超平面的距离值(记为d‘)。我们要找的是距离包含 i 维的超平面的距离和最小值,相反就是使得上述 d’ 最大化。

关于 d‘ 的求解,就是变换后的坐标的绝对值,为方便,使用平方表示,也即 X ′ X' X 中所有元素平方求和
d ′ = ∑ i = 1 m ∑ i = 1 l ( w i T x j ) 2 d' = \sum\limits_{i=1}^m\sum\limits_{i=1}^l (w_i^Tx_j)^2 d=i=1mi=1l(wiTxj)2
其实不用公式推导,在中心化的条件下,矩阵所有元素平方和相加就是所有方差和,也就是 X ′ X' X 协方差矩阵的对角元素和。

(说明:当降低一维的时候这种思路比较容易理解,当降低多个维度时,自己陷入思维困境。正统做法,参考《机器学习》中方法即可,那个比较好理解)

最优化问题
a r g   m a x W   t r ( W T X X T W ) s . t    W T W = E (*3) arg\ \mathop{max}\limits_{W}\ tr(W^TXX^TW) \\ s.t\ \ W^TW=E \tag{*3} arg Wmax tr(WTXXTW)s.t  WTW=E(*3)

基于最大可分性

求解在转换后的新坐标系下,样本在各个新轴投影的方差。

根据(4-3)我们知道,新坐标系 W 下,样本点坐标为 W − 1 X W^{-1}X W1X 因为 W 是单位正交基, W − 1 = W T W^{-1}=W^T W1=WT ,新坐标下样本点坐标为 W T X W^TX WTX

对于一系列随机变量,如何求解在各个轴投影上的方差呢,参考协方差(6-4),我们只需要对其得到协方差矩阵即可。对角线部分即是投影到各个轴上的方差,其余部分因为基正交的原因,协方差都为 0 .

那么由(6-3)求解 W T X W^TX WTX 的协方差矩阵
∑ W T X = 1 m W T X ( W T X ) T = 1 m W T X X T W (*4) \sum_{W^TX} = \frac{1}{m}W^TX(W^TX)^T=\frac{1}{m}W^TXX^TW \tag{*4} WTX=m1WTX(WTX)T=m1WTXXTW(*4)
最优化问题
a r g   m a x W   t r ( W T X X T W ) s . t    W T W = E (*5) arg\ \mathop{max}\limits_{W}\ tr(W^TXX^TW) \\s.t\ \ W^TW=E\tag{*5} arg Wmax tr(WTXXTW)s.t  WTW=E(*5)

上述最优化问题就是瑞利熵最优化问题

2. 方法
  • 基于拉格朗日乘子
  • 基于奇异值
基于拉格朗日乘子

构造拉格朗日函数
f ( W , λ ) = t r ( W T X X T W ) + λ ( 1 − W T W ) f(W,\lambda) = tr(W^TXX^TW) + \lambda(1-W^TW) f(W,λ)=tr(WTXXTW)+λ(1WTW)
求极值
∂ f ∂ W = ( X X T + X T X ) W = 2 X X T W − 2 λ W = 0 ⇒ X X T W = λ W \frac{\partial f}{\partial W} = (XX^T+X^TX)W = 2XX^TW-2\lambda W=0 \Rightarrow XX^TW=\lambda W Wf=(XXT+XTX)W=2XXTW2λW=0XXTW=λW
带入到最优化问题
t r ( W T X X T W ) = t r ( λ W T W ) = λ tr(W^TXX^TW) = tr(\lambda W^TW)=\lambda tr(WTXXTW)=tr(λWTW)=λ
问题转化为求解 λ \lambda λ 最大值。且 λ \lambda λ 为协方差矩阵 X X T XX^T XXT 的特征值,对应的特征向量就是 W。

总结来看,需要做的工作就是:对协方差矩阵进行特征值和特征向量的求解,然后按照特征值从大到小排序,从中选取出前 l ′ l' l 个特征值和其对应的特征向量(投影矩阵 W ’ W’ W )。最终投影后的得到值 W ′ T X W'^TX WTX,就是最后降维的结果。

基于奇异值

回到式子(*4),该矩阵对角线元素对应着每个变量(维度投影后)的方差

我们目标是求解 W,同时注意到
∑ X = 1 m X X T \sum_{X}=\frac{1}{m}XX^T X=m1XXT
式(*4)变为
∑ W T X = W T ∑ X W \sum_{W^TX}=W^T\sum_XW WTX=WTXW
其实我们的目标就是求得变换 W 使原始坐标下的协方差矩阵对角化。对角元素如按照从大到小顺序排列,那么 W 矩阵的前 l ′ l' l 列就是我们要寻找的基(变换矩阵)。

对于 W 的求解,不就是奇异值分解的内容嘛。

算法流程

样本集 ( x 1 , x 2 , ⋯   , x m ) (x_1,x_2,\cdots,x_m) (x1,x2,,xm) l l l 维降低到 l ′ l' l

  1. 样本中心化处理: x i ← x i − 1 m ∑ i = 1 m x i x_i \leftarrow x_i-\frac{1}{m}\sum\limits_{i=1}^m x_i xixim1i=1mxi
  2. 计算样本的协方差(散度)矩阵 X X T XX^T XXT
  3. 对协方差矩阵 X X T XX^T XXT 做特征值分解
  4. 取最大的 l’ 个特征值对应的特征向量 w 1 , w 2 , ⋯   , w l ′ w_1,w_2,\cdots,w_{l'} w1,w2,,wl

得到投影矩阵 W ’ = ( w 1 , w 2 , ⋯   , w l ′ ) W’=(w_1,w_2,\cdots,w_{l'}) W=(w1,w2,,wl) ,样本输出 W ′ T X W'^TX WTX

实现

为了可视化方便,使用二维数据,降低到一维,数据集如下

12345678910
x 1 x_1 x1-4-3-2-1012345
x 2 x_2 x2-5-4-1-3033437
1. 基于协方差矩阵的特征值分解
  • 求解协方差矩阵 X X T XX^T XXT 的特征值与特征向量
  • 特征值从大到小排序,找到对应的前 l’ 个特征向量

这种方法基于协方差矩阵的求解比较耗时

2. 基于协方差矩阵的 SVD 分解
  • 对 X 进行 SVD 分解,得到特征值和特征向量矩阵 U
  • 特征值从大到小排序,找到 U 中对应的前 l’ 个特征向量
3. 代码实现
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

def PCA():
    x0 = np.array([[-4,-3,-2,-1,0,1,2,3,4,5],[-5,-4,-1,-3,0,3,3,4,3,7]], dtype=np.float)
    x = x0.copy()
    
    data = pd.DataFrame(x)
    print("原始数据: \n",data,"\n")
    
    # 中心化
    x[0] = x[0] - np.sum(x[0])/len(x[0])
    x[1] = x[1] - np.sum(x[1])/len(x[1])
    
    data2 = pd.DataFrame(x)
    print("中心化后: \n",data2,"\n")

    # 协方差矩阵
    Sigma = np.dot(x,x.T)

    data3 = pd.DataFrame(Sigma)
    print("协方差矩阵: \n",data3,"\n")

    # 特征值与特征向量
    s = np.linalg.eig(Sigma)    # 基于协方差矩阵求解
    Lambda = s[0]
    print("基于协方差\n特征值: \n", Lambda,"\n")
    w = s[1]
    print("特征向量: \n",w,"\n")

    U,S,v = np.linalg.svd(x) # 基于 SVD 分解求解
    print("基于SVD\nS: \n",S,"\n")
    print("U: \n",U,"\n")
    
    # 投影矩阵
    W = w[:,1]
    print("投影矩阵: \n",W,"\n")

    # PCA 轴
    xx = np.linspace(-6,6,7)
    y1 = W[1]/W[0] * xx
    y2 = w[:,0][1]/w[:,0][0] * xx
    plt.plot(xx,y1,color="r")
    plt.plot(xx,y2,color="c")
    plt.legend(["PCA1","PCA2"])
    # np.dot(w[:,1],w[:,0].T) = 0  轴是垂直的

    # 降维后的值
    xx = np.dot(W,x0)
    print("降维后值: \n",xx,"\n")


    plt.scatter(x[0],x[1])
    plt.xlim(-8,8)
    plt.ylim(-8,8)
    plt.grid()
    plt.show()

PCA()

result :
在这里插入图片描述

在这里插入图片描述

线性判别分析(Linear Discriminate Analysis, LDA)

基本内容

  • LDA 轴不是正交的
  • 监督学习
  • 不同类投影中心点间距尽量大
  • 同类投影间距尽量小
    在这里插入图片描述

公式推导

假设有 L L L 个类别,数据点表示如下

第一类样本点: x 1 ( 1 ) , x 2 ( 1 ) , . . . , x k ( 1 ) , . . . , x n 1 ( 1 ) x_1^{(1)}, x_2^{(1)}, ..., x_k^{(1)}, ..., x_{n_1}^{(1)} x1(1),x2(1),...,xk(1),...,xn1(1),共 n 1 n_1 n1个数据

第二类样本点: x 1 ( 2 ) , x 2 ( 2 ) , . . . , x k ( 2 ) , . . . , x n 2 ( 2 ) x_1^{(2)}, x_2^{(2)}, ..., x_k^{(2)}, ..., x_{n_2}^{(2)} x1(2),x2(2),...,xk(2),...,xn2(2),共 n 2 n_2 n2个数据

i i i 类样本点: x 1 ( i ) , x 2 ( i ) , . . . , x k ( i ) , . . . , x n i ( i ) x_1^{(i)}, x_2^{(i)}, ..., x_k^{(i)}, ..., x_{n_i}^{(i)} x1(i),x2(i),...,xk(i),...,xni(i),共 n i n_i ni个数据

e T e^T eT为投影矩阵,第 i i i 类样本点投影后的中心 m i m_i mi 为:
m i = 1 n i ∑ l = 1 n i e T x l ( i ) = e T { 1 n i ∑ l = 1 n i x l ( i ) } = e T m ^ i m_i = \frac{1}{n_i}\sum\limits_{l=1}^{n_i} e^T x_l^{(i)} = e^T \{\frac{1}{n_i}\sum\limits_{l=1}^{n_i}x_l^{(i)}\} = e^T \hat m_i mi=ni1l=1nieTxl(i)=eT{ni1l=1nixl(i)}=eTm^i
其中, m ^ i = 1 n i ∑ l = 1 n i x l ( i ) \hat m_i = \frac{1}{n_i}\sum\limits_{l=1}^{n_i}x_l^{(i)} m^i=ni1l=1nixl(i) 表示第 i 类样本(投影前)的中心(或平均值)

1. 不同类间距最大化

那么投影后,任意两类间的中心间距为
d b = P i P j ( m i − m j ) 2 d_b = P_i P_j (m_i - m_j)^2 db=PiPj(mimj)2
其中, P i P_i Pi P j P_j Pj表示取到 i i i j j j类点的概率
P i = i 类 点 数 目 总 点 数 目 = n i n P_i = \frac{i类点数目}{总点数目} = \frac{n_i}{n} Pi=i=nni
所有类投影后中心间距总和为
D b = 1 2 ∑ i = 1 L ∑ j = 1 L P i P j ( m i − m j ) 2 = 1 2 ∑ i = 1 L ∑ j = 1 L P i P j ( e T m ^ i − e T m ^ j ) ( e T m ^ i − e T m ^ j ) T = 1 2 ∑ i = 1 L ∑ j = 1 L P i P j e T ( m ^ i − m ^ j ) ( m ^ i − m ^ j ) T e = e T { 1 2 ∑ i = 1 L ∑ j = 1 L P i P j ( m ^ i − m ^ j ) ( m ^ i − m ^ j ) T } e = e T S b L D A e \begin{aligned} D_b &=\frac{1}{2}\sum\limits_{i=1}^L\sum\limits_{j=1}^L P_i P_j(m_i-m_j)^2 \\ &=\frac{1}{2}\sum\limits_{i=1}^L\sum\limits_{j=1}^L P_i P_j(e^T \hat m_i-e^T \hat m_j)(e^T \hat m_i-e^T \hat m_j)^T \\ &=\frac{1}{2}\sum\limits_{i=1}^L\sum\limits_{j=1}^L P_i P_j e^T(\hat m_i-\hat m_j)(\hat m_i-\hat m_j)^T e \\ &=e^T \{\frac{1}{2}\sum\limits_{i=1}^L\sum\limits_{j=1}^L P_i P_j (\hat m_i-\hat m_j)(\hat m_i-\hat m_j)^T \}e \\ &=e^T S_b^{LDA}e \end{aligned} Db=21i=1Lj=1LPiPj(mimj)2=21i=1Lj=1LPiPj(eTm^ieTm^j)(eTm^ieTm^j)T=21i=1Lj=1LPiPjeT(m^im^j)(m^im^j)Te=eT{21i=1Lj=1LPiPj(m^im^j)(m^im^j)T}e=eTSbLDAe
说明:(I)直接求和累加,每两点计算了两次,所以要除以2 (II)常数的转置仍为本身 N = N T N=N^T N=NT

类间
S b L D A = 1 2 ∑ i = 1 L ∑ j = 1 L P i P j ( m ^ i − m ^ j ) ( m ^ i − m ^ j ) T \begin{aligned} S_b^{LDA} &= \frac{1}{2}\sum\limits_{i=1}^L\sum\limits_{j=1}^L P_i P_j (\hat m_i-\hat m_j)(\hat m_i-\hat m_j)^T \\ \end{aligned} SbLDA=21i=1Lj=1LPiPj(m^im^j)(m^im^j)T
为方便理解,假设类别数 L = 3 L=3 L=3
在这里插入图片描述

S b L D A S_b^{LDA} SbLDA 表征各类别中心点(图中"x"表示的m_i)之间的距离总和,可以使用每个类别中心点到总体中心点(图中"o"表示的 m)来代替表示,也即
S b L D A = 1 2 ∑ i = 1 L ∑ j = 1 L P i P j ( m ^ i − m ^ j ) ( m ^ i − m ^ j ) T     ( 1 ) ⇒ ∑ i = 1 L P i ( m ^ i − m ^ ) ( m ^ i − m ^ ) T     ( 2 ) h e r e ,         m ^ = 1 n ∑ i = 1 L ∑ l = 1 n i x l ( i ) = ∑ i = 1 L P i m ^ i \begin{aligned} S_b^{LDA} &= \frac{1}{2}\sum\limits_{i=1}^L\sum\limits_{j=1}^L P_i P_j (\hat m_i-\hat m_j)(\hat m_i-\hat m_j)^T \ \ \ (1)\\ &\Rightarrow \sum\limits_{i=1}^L P_i(\hat m_i-\hat m)(\hat m_i -\hat m)^T \ \ \ (2)\\ here,\ \ \ \ \ \ \ \hat m&= \frac{1}{n} \sum\limits_{i=1}^L\sum\limits_{l=1}^{n_i}x_l^{(i)} = \sum\limits_{i=1}^L P_i \hat m_i \end{aligned} SbLDAhere,       m^=21i=1Lj=1LPiPj(m^im^j)(m^im^j)T   (1)i=1LPi(m^im^)(m^im^)T   (2)=n1i=1Ll=1nixl(i)=i=1LPim^i

事实上,(1)(2)两者是相等的,证明如下

左侧:
S b L D A = 1 2 ∑ i = 1 L ∑ j = 1 L P i P j ( m ^ i − m ^ j ) ( m ^ i − m ^ j ) T = 1 2 ∑ i = 1 L ∑ j = 1 L P i P j ( m ^ i m ^ i T − m ^ i m j T − m ^ j m ^ i T + m ^ j m ^ j T ) = 1 2 ( ∑ i = 1 L P i m ^ i m ^ i T ) ( ∑ j = 1 L P j ) − 1 2 ( ∑ i = 1 L P i m ^ i ) ( ∑ i = 1 L P j m ^ j T ) − 1 2 ( ∑ j = 1 L P j m ^ j ) ( ∑ i = 1 L P i m ^ i T ) + 1 2 ( ∑ j = 1 L P j m ^ j m ^ j T ) ( ∑ i = 1 L P i ) = 1 2 ( ∑ i = 1 L P i m ^ i m ^ i T ) − 1 2 m ^ m ^ T − 1 2 m ^ m ^ T + 1 2 ( ∑ j = 1 L P j m ^ j m ^ j T ) = ∑ i = 1 L P i m ^ i m ^ i T − m ^ m ^ T \begin{aligned} S_b^{LDA} &= \frac{1}{2}\sum\limits_{i=1}^L\sum\limits_{j=1}^L P_i P_j (\hat m_i-\hat m_j)(\hat m_i-\hat m_j)^T \\ &=\frac{1}{2}\sum\limits_{i=1}^L\sum\limits_{j=1}^L P_i P_j (\hat m_i\hat m_i^T - \hat m_i m_j^T -\hat m_j \hat m_i^T + \hat m_j \hat m_j^T) \\ &=\frac{1}{2}(\sum\limits_{i=1}^LP_i \hat m_i \hat m_i^T)(\sum\limits_{j=1}^L P_j) - \frac{1}{2}(\sum\limits_{i=1}^LP_i \hat m_i) (\sum\limits_{i=1}^{L} P_j \hat m_j^T)- \frac{1}{2}(\sum\limits_{j=1}^LP_j \hat m_j) (\sum\limits_{i=1}^L P_i \hat m_i^T) +\frac{1}{2}(\sum\limits_{j=1}^LP_j \hat m_j \hat m_j^T) (\sum\limits_{i=1}^L P_i) \\ &=\frac{1}{2}(\sum\limits_{i=1}^LP_i \hat m_i \hat m_i^T) - \frac{1}{2} \hat m\hat m^T -\frac{1}{2} \hat m \hat m^T + \frac{1}{2}(\sum\limits_{j=1}^LP_j \hat m_j \hat m_j^T) \\ &=\sum\limits_{i=1}^LP_i \hat m_i \hat m_i^T - \hat m\hat m^T \end{aligned} SbLDA=21i=1Lj=1LPiPj(m^im^j)(m^im^j)T=21i=1Lj=1LPiPj(m^im^iTm^imjTm^jm^iT+m^jm^jT)=21(i=1LPim^im^iT)(j=1LPj)21(i=1LPim^i)(i=1LPjm^jT)21(j=1LPjm^j)(i=1LPim^iT)+21(j=1LPjm^jm^jT)(i=1LPi)=21(i=1LPim^im^iT)21m^m^T21m^m^T+21(j=1LPjm^jm^jT)=i=1LPim^im^iTm^m^T
右侧:
∑ i = 1 L P i ( m ^ i − m ^ ) ( m ^ i − m ^ ) T = ∑ i = 1 L P i ( m ^ i m ^ i T − m ^ i m ^ T − m ^ m ^ i T + m ^ m ^ T ) = ∑ i = 1 L P i m ^ i m ^ i T − m ^ m ^ T − m ^ m ^ + m ^ m ^ = ∑ i = 1 L P i m ^ i m ^ i T − m ^ m ^ T \begin{aligned}&\sum\limits_{i=1}^L P_i(\hat m_i-\hat m)(\hat m_i -\hat m)^T \\=&\sum\limits_{i=1}^L P_i(\hat m_i \hat m_i^T-\hat m_i \hat m^T - \hat m \hat m_i^T +\hat m \hat m^T) \\=&\sum\limits_{i=1}^L P_i \hat m_i \hat m_i^T -\hat m \hat m^T -\hat m \hat m + \hat m \hat m \\=&\sum\limits_{i=1}^L P_i \hat m_i \hat m_i^T-\hat m \hat m^T\end{aligned} ===i=1LPi(m^im^)(m^im^)Ti=1LPi(m^im^iTm^im^Tm^m^iT+m^m^T)i=1LPim^im^iTm^m^Tm^m^+m^m^i=1LPim^im^iTm^m^T
得证。

也即:
S b L D A = ∑ i = 1 L P i ( m ^ i − m ^ ) ( m ^ i − m ^ ) T S_b^{LDA} =\sum\limits_{i=1}^L P_i(\hat m_i-\hat m)(\hat m_i -\hat m)^T SbLDA=i=1LPi(m^im^)(m^im^)T

这称作类间的散度矩阵。(注意: P i P_i Pi 为取到该类点的概率)

2. 同类间距最小化

那么投影后同类点到该类投影后中心点 m i m_i mi的间距和为
d w = ∑ l = 1 n i 1 n i ( e T x l ( i ) − m i ) 2 d_w = \sum\limits_{l=1}^{n_i}\frac{1}{n_i}(e^T x_l^{(i)}-m_i)^2 dw=l=1nini1(eTxl(i)mi)2
对于所有类别点,同类间距之和为
D w = ∑ i = 1 L P i ∑ l = 1 n i 1 n i ( e T x l ( i ) − m i ) 2 = e T { ∑ i = 1 L P i 1 n i ∑ l = 1 n i ( x l ( i ) − m ^ i ) ( x l ( i ) − m ^ i ) T } e = e T S w L D A e \begin{aligned}D_w&=\sum\limits_{i=1}^L P_i \sum\limits_{l=1}^{n_i}\frac{1}{n_i}(e^T x_l^{(i)}-m_i)^2 \\&=e^T \{ \sum\limits_{i=1}^L P_i \frac{1}{n_i}\sum\limits_{l=1}^{n_i}(x_l^{(i)}-\hat m_i)(x_l^{(i)}-\hat m_i)^T \}e \\&=e^T S_w^{LDA} e\end{aligned} Dw=i=1LPil=1nini1(eTxl(i)mi)2=eT{i=1LPini1l=1ni(xl(i)m^i)(xl(i)m^i)T}e=eTSwLDAe
其中
S w L D A = ∑ i = 1 L P i 1 n i ∑ l = 1 n i ( x l ( i ) − m ^ i ) ( x l ( i ) − m ^ i ) T S_w^{LDA}=\sum\limits_{i=1}^L P_i \frac{1}{n_i} \sum\limits_{l=1}^{n_i}(x_l^{(i)}-\hat m_i)(x_l^{(i)}-\hat m_i)^T SwLDA=i=1LPini1l=1ni(xl(i)m^i)(xl(i)m^i)T

称作类内的散度矩阵。

3. Linear Discriminate Analysis

综合以上

DistancesScatter MatrixAnalysis
Between-class D b = e T S b L D A e D_b = e^T S_b^{LDA} e Db=eTSbLDAe S b L D A = ∑ i = 1 L P i ( m ^ i − m ^ ) ( m ^ i − m ^ ) T S_b^{LDA} =\sum\limits_{i=1}^L P_i(\hat m_i-\hat m)(\hat m_i -\hat m)^T SbLDA=i=1LPi(m^im^)(m^im^)T a r g m a x ( D b ) arg max(D_b) argmax(Db)
Within-class D w = e T S w L D A e D_w = e^T S_w^{LDA} e Dw=eTSwLDAe S w L D A = ∑ i = 1 L P i 1 n i ∑ l = 1 n i ( x l ( i ) − m i ) ( x l ( i ) − m i ) T S_w^{LDA}=\sum\limits_{i=1}^L P_i\frac{1}{n_i} \sum\limits_{l=1}^{n_i}(x_l^{(i)}-m_i)(x_l^{(i)}-m_i)^T SwLDA=i=1LPini1l=1ni(xl(i)mi)(xl(i)mi)T a r g m i n ( D w ) argmin(D_w) argmin(Dw)

有个很有用的关系: 总体散度 = 类间散度 + 类内散度
S t = S b + S w S_t = S_b + S_w St=Sb+Sw
同时考虑 a r g m a x ( D b ) argmax(D_b) argmax(Db) a r g m i n ( D w ) argmin(D_w) argmin(Dw) ,问题转化
e = a r g   m a x e ∈ R d e T S b L D A e e T S w L D A e = a r g   m a x e ∈ R d R ( e ) e = arg\ \mathop{max}\limits_{e\in R^d} \frac{e^T S_b^{LDA} e}{e^T S_w^{LDA} e} = arg\ \mathop{max}\limits_{e\in R^d} R(e) e=arg eRdmaxeTSwLDAeeTSbLDAe=arg eRdmaxR(e)
其中
R ( e ) = e T S b L D A e e T S w L D A e R(e) = \frac{e^T S_b^{LDA} e}{e^T S_w^{LDA} e} R(e)=eTSwLDAeeTSbLDAe
称作为泛化瑞利熵(generalized Rayleigh quotient)

因此,LDA的目标就是最大化广义瑞利熵

参考前述瑞利熵内容,将其转化为一般瑞利熵,有
R ( e ) = e ′ H ( S w − 1 2 S b S w − 1 2 ) e ′ e ′ H e R(e) =\frac{e'^H(S_w^{-\frac{1}{2}}S_b S_w^{- \frac{1}{2}})e'}{e'^He} R(e)=eHeeH(Sw21SbSw21)e
像极了 PCA 中的最优化问题。

算法流程

样本集 ( x 1 , x 2 , ⋯   , x m ) (x_1,x_2,\cdots,x_m) (x1,x2,,xm) l l l 维降低到 l ′ l' l

  1. 计算类内散度矩阵 S w S_w Sw
  2. 计算类间散度矩阵 S b S_b Sb
  3. 计算矩阵 S w − 1 S b S_w^{-1}S_b Sw1Sb ,对其进行特征值分解
  4. 取最大的 l ′ l' l 个特征值对应的特征向量 w 1 , w 2 , ⋯   , w l ‘ w_1,w_2,\cdots,w_{l‘} w1,w2,,wl

得到投影矩阵 W ′ = ( w 1 , w 2 , ⋯   , w l ′ ) W'=(w_1,w_2,\cdots,w_{l'}) W=(w1,w2,,wl),输出结果 W ′ T X W'^TX WTX

实现

使用与 PCA 类似的数据,不过添加了标签

Class 1:

12345
x 1 x_1 x1-4-3-2-10
x 2 x_2 x2-5-4-1-30

Class 2:

678910
x 1 x_1 x112345
x 2 x_2 x233437

代码如下:

	import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

def LDA():
    x1 = np.array([[-4,-3,-2,-1,0],[-5,-4,-1,-3,0]], dtype=np.float)
    x2 = np.array([[1,2,3,4,5],[3,3,4,3,7]], dtype=np.float)
    l1 = len(x1[0])
    l2 = len(x2[0])
    l = l1 + l2
    p1 = l1/l   # 类1概率
    p2 = l2/l   # 类2概率
    m1 = np.array([[np.sum(x1[0,:])/len(x1[0,:])],[np.sum(x1[1,:])/len(x1[1,:])]])  # 类1中心(均值)
    m2 = np.array([[np.sum(x2[0,:])/len(x2[0,:])],[np.sum(x2[1,:])/len(x2[1,:])]])  # 类2中心(均值)
    m = p1*m1 + p2*m2   # 总体中心(均值)

    data1 = pd.DataFrame(x1)
    data2 = pd.DataFrame(x2)
    print("原始数据: \nClass 1:\n",data1,"\n")
    print("Class 2:\n",data2,"\n")

    # 类内散度矩阵
    Sw_1 = p1*(1/l1) * np.cov(x1) * (l1-1)
    Sw_2 = p2*(1/l2) * np.cov(x2) * (l2-1)
    Sw = Sw_1 + Sw_2
    print("Sw : \n",Sw,"\n")

    # 类间散度矩阵
    Sb_1 = p1 * np.dot(m1-m,(m1-m).T)
    Sb_2 = p2 * np.dot(m2-m,(m2-m).T)
    Sb = Sb_1 + Sb_2
    print("Sb : \n",Sb,"\n")

    # 总散度矩阵
    x0 = np.hstack((x1,x2))
    St = 1/l * np.cov(x0) * (l-1)
    print("St : \n",St,"\n")
    print("Sw+Sb: \n",Sw+Sb,"\n")

    # 另一种求法
    x0[0] = x0[0] - np.sum(x0[0])/len(x0[0])
    x0[1] = x0[1] - np.sum(x0[1])/len(x0[1])

    # 特征值与特征向量
    S = np.dot(np.linalg.inv(Sw),Sb)
    s = np.linalg.eig(S)
    Lambda = s[0]
    w = s[1]
    print("特征值 : \n",Lambda,"\n")
    print("特征向量 : \n",w,"\n")

    # 投影矩阵
    W = w[:,1]
    print("投影矩阵 : \n",W,"\n")

    # LDA 轴
    xx = np.linspace(-6,6)
    y1 = W[1]/W[0] * xx
    y2 = w[:,0][1]/w[:,0][0] * xx
    plt.plot(xx,y1,color="r")
    plt.plot(xx,y2,color="c")
    plt.legend(["LDA1","LDA2"])
    # np.dot(w[:,1],w[:,0].T) != 0  轴不一定垂直

    # 降维后的值
    xx = np.dot(W,x0)
    print("降维后值: \n",xx,"\n")

    plt.scatter(x1[0],x1[1],color="b")
    #plt.scatter(m1[0],m1[1],color="b",marker="x")
    plt.scatter(x2[0],x2[1],color="r")
    #plt.scatter(m2[0],m2[1],color="r",marker="x")
    #plt.scatter(m[0],m[1],color="black",marker="x")
    plt.xlim(-8,8)
    plt.ylim(-8,8)
    plt.grid()
    plt.show()

LDA()

result:
在这里插入图片描述
在这里插入图片描述

说明:

  1. LDA 的两轴一般不是正交的

  2. 对于散度矩阵的求解可以使用代码所示两种方法
    ( 1 )    S = c o v ( X ) ∗ ( N − 1 ) ( 2 )   中 心 化 X    →    X X T \begin{aligned}&(1)\ \ S = cov(X) * (N-1) \\&(2)\ 中心化X\ \ \rightarrow\ \ XX^T\end{aligned} (1)  S=cov(X)(N1)(2) X    XXT

LDA 与 PCA

给出上述“相同”实例中,两者的降维结果图:
在这里插入图片描述

共同点

  • 都假设数据服从高斯分布
  • 都是用于降低维度
  • 都使用了特征分解思想

不同点

  • LDA 是广义瑞利熵的应用;PCA 是一般瑞利熵的应用
  • LDA 是有监督有标签,所以也可以用于分类;PCA 是无监督
  • LDA 思想是类内间距最小,类间间距最大;PCA 思想是投影后方差最大
  • LDA 降低到 k-1 维度;PCA 没有限制
  • LDA 轴一般是不正交的;PCA 轴正交
  • 具体情况,具体分析

目前自己用时和篇幅最长的一篇博客,完结,撒花!

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
LDA降维PCA降维是两种常用的降维方法,它们有一些区别。首先,LDA是一种有监督学习方法,而PCA是一种无监督学习方法。这意味着LDA降维过程中可以利用类别的先验知识,而PCA则无法使用类别先验知识。\[2\] 其次,LDA在样本分类信息依赖均值而不是方差的情况下表现较好,而PCA则不考虑样本的类别信息,只关注数据的方差。因此,在样本分类信息依赖方差而不是均值的情况下,LDA降维效果可能不如PCA。\[2\] 另外,LDA降维最多可以降到类别数k-1的维数,而PCA没有这个限制。如果需要降维的维度大于k-1,则不能使用LDA。当然,目前也有一些LDA的进化版算法可以绕过这个问题。\[2\] 总的来说,LDA降维更适合在有类别信息的情况下进行降维,而PCA降维则更适合在无监督学习的场景下进行降维。此外,它们在处理非高斯分布样本、样本分类信息依赖方差而不是均值以及过度拟合数据等方面也有一些不同的表现。\[2\] \[3\] #### 引用[.reference_title] - *1* *2* *3* [降维(PCALDA)](https://blog.csdn.net/weixin_43584807/article/details/105162516)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值