PCA与LDA

注:这里说的LDA实际上讲的是Fisher linear discriminant analysis

在machine learning领域,PCA和LDA都可以看成是数据降维的一种方式。但是PCA是unsupervised,也就是说不需要知道sample对应的label,而LDA是supervised,需要知道每一个数据点对应的label。下面分别解释PCA和LDA的基本原理

1.PCA

PCA被广泛用于数据降维处理,在PRML书上写道,PCA有两种定义的方式,其中一种是将PCA定义为一种正交投影,使得原始数据在投影子空间的各个维度的方差最大化。下面我们就以这个定义来推导PCA。

考虑一组观测数据{xn}, n=1,...,Nn=1,...,N,其中xn是 D 维向量,我们的目标就是把数据投影到一个更低的M维空间上,并且保证原始数据在这个子空间的各个方向上的方差最大化。

首先假设M=1,也就是把所有数据投影到D维空间上的一条直线上。我们可以利用一个D维单位向量u1来表示这条直线。原始数据集\bar{x}的均值向量 可以表示成 

\bar{x}=\frac{1}{N}\times \sum_{i=1}^{N}x_{i}

那么投影之后的均值向量可以表示成 u_{1}^{T}\bar{x} ,投影之后的方差可以表示成 

\frac{1}{N}\sum_{n=1}^{N}(u_1^Tx_n-u_1^T\bar{x})^2=u_1^TSu_1
其中 S表示原始数据的协方差矩阵 
按照PCA的定义,下面我们需要最大化这个方差。这是一个典型的有约束优化问题,利用拉格朗日乘子法,假设乘子为 λ1,那么优化问题可以成为 

\arg \max u_{1}^{T}Su_{1}+\lambda _{1}(1-u_{1}^{T}u_1)

直接对 u1求导,令导数等于0,得到 

   Su_{1}=\lambda _{1}u_1
也就是说,u1是S中 λ1特征值对应的特征向量。对于(1)式,等式两边同时乘上u_{1}^{T},可以得到原始数据在子空间的投影方向上的方差为 

u_{1}^{T}Su_{1}=\lambda _{1}
要是方差最大,我们知道 λ1就要是S的最大的特征值,同理,u1就要是SS的最大特征值对应的特征向量。

当我们把一维投影空间拓展到M维投影空间,原理都是一样的,比如如果是2维投影空间,那么在第二维投影方向上的方差就是第二大,同时要保证第二维投影向量u2和u1正交。

总的来说,如果要将原始D维数据投影到M维子空间当中,PCA的做法是计算原始数据的协方差矩阵SS,然后求其前MM大特征值对应的特征向量。当然,这里的MM目前都是人工设定的。其实我们也可以自动设定,因为协方差矩阵的特征值实际上表示了各个维度包含的信息量(能量),所以我们可以选择能量百分比为95%(这个值随意选择)所确定的特征值对应的特征向量组成投影子空间。

2. LDA

(这里指的是fisher’s linear discriminant)把线性分类看成是数据降维的一种应用。考虑一个二分类问题,假设输入D维向量x,我们通过线性变换将它投影到一维空间上:y=w^{T}x

如果我们对y设定一个阈值,令y\geqslant M的时候,判定为class1,否则判定为class2.那么这其实就是标准的线性分类器。为了能让我们的判定尽可能准确,我们需要让投影之间的两个类之间的差距尽可能大。现在仍旧考虑二分类问题,假设有N1个C1类别的点,有N2个C2C2类别的点,则两个类别的数据的均值分别为 m1、m2。

最简单的分类方法,就是让投影之后的两个类别的均值相差越大越好。也就是说,我们需要选择一个投影方向(单位投影矢量ww),使得下式最大 

\hat{m}_{2}-\hat{m}_{1}=w_{T}(m_2-m_1)

其中 

\hat{m}_{k}=w_Tm_k


同时满足 

w_Tw=1

这么一个约束优化问题和上面的PCA类似,解得结果可以得到 

M\propto (m_2-m_1)

也就是说,w是和两类数据中心点构成的矢量平行。如下面左图所示:

LDA_1

红色和蓝色分别表示两类数据,可以看到,尽管在投影方向w上,两类数据确实有分开,但是还存在很大程度上的交叠。Fisher提出的观点就是在让投影之后的数据尽量分开的同时,也要让两个数据的方差最小,最后变成右图所示的结果。

投影之后数据的类内方差表达式为 

s_k^{2}=\sum_{n\epsilon C_K}(y_n-\bar{m}_k)^2

其中yn表示xn投影之后的值。我们可以定义总体的类内方差为 s_1^{2}+s_2^{2}Fisher判别准则定义为类间方差和类内方差的比值,也就是 

J(w)=\frac{(\hat{m}_2-\hat{m}_1)^2}{s_1^2+s_2^2}

把w的表达式代入得到 

J(w)=\frac{w^TS_Bw}{w^TS_ww}                             (1)
其中S_B表示类间协方差矩阵,S_w表示类内协方差矩阵,也就是 

S_B=(m_2-m_1)(m_2-m_1)^T                 (2)

s_w=\sum_{n\epsilon C_1}(x_n-m_1)(x_n-m_1)^T+\sum_{n\epsilon C_2}(x_n-m_2)(x_n-m_2)^T             


对(1)式求导,令导数等于0(为了方便,可以对(1)式两边先取对数,然后求导),可以得到 

(w_TS_Bw)S_ww=(w_TS_ww)S_Bw                                             (3)

从(2)式我们可以看到S_B是始终和 m_2-m_1平行的,同时我们并不在意 w的大小,只在意它的方向,因此,我们可以把 (w_TS_Bw)S_ww  和 (w_TS_ww)S_Bw 直接去掉,然后再在(3)式两边同时乘上 S_w^{-1},就可以得到 

w\propto S_w^{-1}(m_2-m_1)   (4)

(4)式表示的就是Fisher线性判别器。找到和合理的投影方向之后,我们可以通过极大似然的方法来估计最优的分类阈值。

所以PCA和LDA虽然都用到数据降维的思想,但是监督方式不一样,目的也不一样。PCA是为了去除原始数据集中冗余的维度,让投影子空间的各个维度的方差尽可能大,也就是熵尽可能大。LDA是通过数据降维找到那些具有discriminative的维度,使得原始数据在这些维度上的投影,不同类别尽可能区分开来。下面这张图一定程度上表示了PCA和LDA之间投影选择的差别。

LDA_2

猜你喜欢

转载自blog.csdn.net/qq_34555202/article/details/81913355