LDA
在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解一下它的算法原理。除非特别声明,本文中的LDA
均指的是线性判别分析(Linear Discriminant Analysis
),它与自然语言处理领域中的LDA
隐含狄利克雷分布(Latent Dirichlet Allocation
)是有本质上的区别的,后者是一种处理文档的主题模型。
LDA
是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA
不同。PCA
是不考虑样本类别输出的无监督降维技术。LDA
的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度空间上进行投影,投影后希望同种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
这里假设我们有两类数据分别用红色和蓝色表示,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线上,让同种类别数据的投影点尽可能的接近,而且让红色和蓝色数据中心之间的距离尽可能的大:
上图中提供了两种投影方式,那么哪一种能更好的满足我们的标准呢?从直观上可以看出,右图要比左图的投影效果好,因为右图的红色数据和蓝色数据各自较为集中,且类别之间的距离明显。左图则在边界处两类数据比较混杂。以上就是LDA
的主要思想了,当然在实际应用中,我们的数据一般是多个类别的,我们的原始数据一般也是超过二维的,投影后的数据也一般不是直线,而是一个低维的超平面。
在我们将上面直观的内容转化为可以度量的问题之前,我们先了解些必要的数学基础知识,这些在后面讲解具体LDA
原理时会用到。
瑞利商是指这样的函数 R ( A , x ) R(A,x) R(A,x) :
R ( A , x ) = x H A x x H x R(A,x) = \frac{x^HAx}{x^Hx} R(A,x)=xHxxHAx
其中 x x x 为非零向量,而 A A A 为 n × n n×n n×n 的 H e r m i t e Hermite Hermite (埃米尔特)矩阵。所谓的 H e r m i t e Hermite Hermite 矩阵就是满足共轭转置矩阵和自己相等的矩阵,即 A H = A A^H=A AH=A 。如果我们的矩阵 A A A 是实矩阵,则满足 A H = A T A^H=A^T AH=AT 的矩阵即为 H e r m i t e Hermite Hermite 矩阵。
瑞利商 R ( A , x ) R(A,x) R(A,x) 有一个非常重要的性质,即它的最大值等于矩阵 A A A 最大的特征值,而最小值等于矩阵 A A A 的最小的特征值,也就是满足:
λ m i n ≤ x H A x x H x ≤ λ m a x \lambda_{min} \leq \frac{x^HAx}{x^Hx} \leq \lambda_{max} λmin≤xHxxHAx≤λmax
具体的证明大家可以参考这篇文章:瑞利商及其极值的计算。
当向量 x x x 是标准正交基时,即满足 x H x = 1 x^Hx=1 xHx=1 时,瑞利商退化为: R ( A , x ) = x H A x R(A,x)=x^HAx R(A,x)=xHAx ,这个形式在谱聚类和PCA中都有出现。
以上就是瑞利商的内容,现在我们再看看广义瑞利商。广义瑞利商是指这样的函数 R ( A , B , x ) R(A,B,x) R(A,B,x) :
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
其中 x x x 为非零向量,而 A , B A,B A,B 为 n × n n×n n×n 的 H e r m i t e Hermite Hermite 矩阵。 B B B 为正定矩阵。它的最大值和最小值是什么呢?其实我们只要通过将其标准化就可以转化为瑞利商的格式。我们令 x = B − 1 / 2 x ′ x=B^{−1/2}x' x=B−1/2x′ ,则分母转化为:
x H B x = x ′ H ( B − 1 / 2 ) H B B − 1 / 2 x ′ = x ′ H B − 1 / 2 B B − 1 / 2 x ′ = x ′ H x ′ x^HBx = x'^H(B^{-1/2})^HBB^{-1/2}x' = x'^HB^{-1/2}BB^{-1/2}x' = x'^Hx' xHBx=x′H(B−1/2)HBB−1/2x′=x′HB−1/2BB−1/2x′=x′Hx′
而分子转化为:
x H A x = x ′ H B − 1 / 2 A B − 1 / 2 x ′ x^HAx = x'^HB^{-1/2}AB^{-1/2}x' xHAx=x′HB−1/2AB−1/2x′
此时我们的 R ( A , B , x ) R(A,B,x) R(A,B,x) 转化为 R ( A , B , x ′ ) R(A,B,x′) R(A,B,x′):
R ( A , B , x ′ ) = x ′ H B − 1 / 2 A B − 1 / 2 x ′ x ′ H x ′ R(A,B,x') = \frac{x'^HB^{-1/2}AB^{-1/2}x'}{x'^Hx'} R(A,B,x′)=x′Hx′x′HB−1/2AB−1/2x′
利用前面的瑞利商的性质,我们可以很快的知道, R ( A , B , x ′ ) R(A,B,x') R(A,B,x′) 的最大值为矩阵 B − 1 / 2 A B − 1 / 2 B^{−1/2}AB^{−1/2} B−1/2AB−1/2 的最大特征值,或者说矩阵 B − 1 A B^{−1}A B−1A 的最大特征值,而最小值为矩阵 B − 1 A B^{−1}A B−1A 的最小特征值。这里使用了一些技巧,即对矩阵进行标准化 A i j B i ⋅ B j \frac{A_{ij}}{\sqrt{B_i \cdot B_j}} Bi⋅BjAij。
现在我们回到LDA
的原理上,我们在第一小节介绍到了LDA
希望投影后同种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大,但这只是一个感官的度量。现在我们首先从比较简单的二类LDA
入手,严谨的分析LDA
的原理。
假设我们的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( ( x m , y m ) ) } D=\{(x_1, y_1),(x_2, y_2), ... , ((x_m,y_m))\} D={(x1,y1),(x2,y2),...,((xm,ym))} ,其中任意样本 x i x_i xi 为 n n n 维向量, y i ∈ { 0 , 1 } y_i∈\{0,1\} yi∈{0,1} 。我们定义 N j ( j = 0 , 1 ) N_j(j=0,1) Nj(j=0,1) 为第 j j j 类样本的个数, X j ( j = 0 , 1 ) X_j(j=0,1) Xj(j=0,1) 为第 j j j 类样本的集合,而 μ j ( j = 0 , 1 ) μ_j(j=0,1) μj(j=0,1) 为第 j j j 类样本的均值向量,定义 Σ j ( j = 0 , 1 ) \Sigma_j(j=0,1) Σj(j=0,1) 为第 j j j 类样本的协方差矩阵(严格说是缺少分母部分的协方差矩阵)。
μ j \mu_j μj 的表达式为:
μ j = 1 N j ∑ x ∈ X j x ( j = 0 , 1 ) \mu_j = \frac{1}{N_j} \sum_{x \in X_j} x \quad (j = 0, 1) μj=Nj1x∈Xj∑x(j=0,1)
Σ j \Sigma_j Σj 的表达式为:
Σ j = ∑ x ∈ X j ( x − μ j ) ( x − μ j ) T ( j = 0 , 1 ) \Sigma_j = \sum_{x \in X_j} (x - \mu_j)(x - \mu_j)^T \quad (j = 0, 1) Σj=x∈Xj∑(x−μj)(x−μj)T(j=0,1)
由于是两类数据,因此我们只需要将数据投影到一条直线上即可。假设我们的投影直线是向量 w w w ,则对任意一个样本 x i x_i xi,它在直线 w w w 的投影为 w T x i w^Tx_i wTxi,对于我们的两个类别的中心点 μ 0 , μ 1 μ_0, μ_1 μ0,μ1 ,在直线 w w w 上的投影为 w T μ 0 w^Tμ_0 wTμ0 和 w T μ 1 w^Tμ_1 wTμ1 。由于LDA
需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化 ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 2 ||w^Tμ_0−w^Tμ_1||_2^2 ∣∣wTμ0−wTμ1∣∣22 ,同时我们希望同种类别数据的投影点尽可能的接近,也就是要让同类样本投影点的协方差 w T Σ 0 w w^T\Sigma_0w wTΣ0w 和 w T Σ 1 w w^T\Sigma_1w wTΣ1w 尽可能的小,即最小化 w T Σ 0 w + w T Σ 1 w w^T\Sigma_0w + w^T\Sigma_1w wTΣ0w+wTΣ1w 。综上所述,我们的优化目标为:
arg max ⏟ w J ( w ) = ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 2 w T Σ 0 w + w T Σ 1 w = w T ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T w w T ( Σ 0 + Σ 1 ) w \underbrace{\arg \max}_w \; J(w) = \frac{||w^Tμ_0−w^Tμ_1||_2^2}{w^T\Sigma_0w + w^T\Sigma_1w} = \frac{w^T(\mu_0 - \mu_1)(\mu_0 - \mu_1)^Tw}{w^T(\Sigma_0 + \Sigma_1)w} w argmaxJ(w)=wTΣ0w+wTΣ1w∣∣wTμ0−wTμ1∣∣22=wT(Σ0+Σ1)wwT(μ0−μ1)(μ0−μ1)Tw
我们一般定义类内散度矩阵 S w S_w Sw 为:
S w = Σ 0 + Σ 1 = ∑ x ∈ X 0 ( x − μ 0 ) ( x − μ 0 ) T + ∑ x ∈ X 1 ( x − μ 1 ) ( x − μ 1 ) T S_w = \Sigma_0 + \Sigma_1 = \sum_{x \in X_0}(x - \mu_0)(x - \mu_0)^T + \sum_{x \in X_1}(x - \mu_1)(x - \mu_1)^T Sw=Σ0+Σ1=x∈X0∑(x−μ0)(x−μ0)T+x∈X1∑(x−μ1)(x−μ1)T
同时定义类间散度矩阵 S b S_b Sb为:
S b = ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T S_b = (\mu_0 - \mu_1)(\mu_0 - \mu_1)^T Sb=(μ0−μ1)(μ0−μ1)T
这样我们的优化目标重写为:
arg max ⏟ w J ( w ) = w T S b w w T S w w \underbrace{\arg \max}_w \; J(w) = \frac{w^TS_bw}{w^TS_ww} w argmaxJ(w)=wTSwwwTSbw
仔细观察上式,这不就是我们的广义瑞利商嘛!那么这就简单了,利用我们第二小节讲到的广义瑞利商的性质,我们知道我们的 J ( w ′ ) J(w') J(w′) 最大值为矩阵 S w − 1 / 2 S b S w − 1 / 2 S^{−1/2}_wS_bS^{−1/2}_w Sw−1/2SbSw−1/2 的最大特征值,而对应的 w ′ w' w′ 其实为 S w − 1 / 2 S b S w − 1 / 2 S^{−1/2}_wS_bS^{−1/2}_w Sw−1/2SbSw−1/2 的最大特征值对应的特征向量!而 S w − 1 S b S^{−1}_wS_b Sw−1Sb 的特征值和 S w − 1 / 2 S b S w − 1 / 2 S^{−1/2}_wS_bS^{−1/2}_w Sw−1/2SbSw−1/2 的特征值相同, S w − 1 S b S^{−1}_wS_b Sw−1Sb 的特征向量 w w w 和 S w − 1 / 2 S b S w − 1 / 2 S^{−1/2}_wS_bS^{−1/2}_w Sw−1/2SbSw−1/2 的特征向量 w ′ w' w′ 满足 w = S w − 1 / 2 w ′ w = S^{−1/2}_ww' w=Sw−1/2w′ 的关系!
注意到对于二类的时候, S b w S_bw Sbw 的方向恒为 μ 0 − μ 1 μ_0 − μ_1 μ0−μ1 ,因为:
S b w = ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T w S_bw = (\mu_0 - \mu_1)(\mu_0 - \mu_1)^T w Sbw=(μ0−μ1)(μ0−μ1)Tw
⇔ S b w = ( μ 0 − μ 1 ) ( w T ( μ 0 − μ 1 ) ) T = ( μ 0 − μ 1 ) ( w T μ 0 − w T μ 1 ) T \Leftrightarrow S_bw = (\mu_0 - \mu_1)(w^T(\mu_0 - \mu_1))^T = (\mu_0 - \mu_1)(w^T\mu_0 - w^T\mu_1)^T ⇔Sbw=(μ0−μ1)(wT(μ0−μ1))T=(μ0−μ1)(wTμ0−wTμ1)T
我们在之前注意到了 w T μ 0 − w T μ 1 w^T\mu_0 - w^T\mu_1 wTμ0−wTμ1 其实是一个标量,即上式可以表示为:
S b w = C ( μ 0 − μ 1 ) 其中C是一个常数 S_bw = C(\mu_0 - \mu_1) \quad \text{其中C是一个常数} Sbw=C(μ0−μ1)其中C是一个常数
不妨令 S b w = λ ( μ 0 − μ 1 ) S_bw = \lambda (μ_0 − μ_1) Sbw=λ(μ0−μ1) ,将其带入: ( S w − 1 S b ) w = λ w (S^{−1}_wS_b)w=\lambda w (Sw−1Sb)w=λw ,可以得到 w = S w − 1 ( μ 0 − μ 1 ) w=S^{−1}_w(μ_0−μ_1) w=Sw−1(μ0−μ1) , 也就是说我们只要求出原始二类样本的均值和方差就可以确定最佳的投影方向 w w w 了。
有了二类LDA
的基础,我们再来看看多类别LDA
的原理。
假设我们的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( ( x m , y m ) ) } D=\{(x_1, y_1), (x_2, y_2), ..., ((x_m, y_m))\} D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 x i x_i xi 为 n n n 维向量, y i ∈ { C 1 , C 2 , . . . , C k } y_i \in \{C_1, C_2, ..., C_k\} yi∈{C1,C2,...,Ck} 。我们定义 N j ( j = 1 , 2 , . . . , k ) N_j(j=1, 2, ..., k) Nj(j=1,2,...,k) 为第j类样本的个数, X j ( j = 1 , 2 , . . . , k ) X_j(j=1, 2, ..., k) Xj(j=1,2,...,k) 为第 j j j 类样本的集合,而 μ j ( j = 1 , 2 , . . . , k ) \mu_j(j=1, 2, ..., k) μj(j=1,2,...,k) 为第 j j j 类样本的均值向量,定义 Σ j ( j = 1 , 2 , . . . , k ) \Sigma_j(j=1, 2, ..., k) Σj(j=1,2,...,k) 为第 j j j 类样本的协方差矩阵。在二类LDA
里面定义的公式我们可以类推到多类LDA
。
由于我们是多类向低维空间投影,则此时投影到的低维空间就不是一条直线了,而是一个超平面。假设我们投影到的低维空间的维度为 d d d ,对应的基向量为 ( w 1 , w 2 , . . . , w d ) (w_1, w_2, ..., w_d) (w1,w2,...,wd) ,基向量组成的矩阵为 W W W , 它是一个 n × d n×d n×d 的矩阵。
此时我们的优化目标可以变成为:
J ( W ) = W T S b W W T S w W J(W) = \frac{W^TS_bW}{W^TS_wW} J(W)=WTSwWWTSbW
其中 S b = ∑ j = 1 k N j ( μ j − μ ) ( μ j − μ ) T S_b = \sum_{j=1}^k N_j (\mu_j - \mu)(\mu_j - \mu)^T Sb=∑j=1kNj(μj−μ)(μj−μ)T , μ \mu μ为所有样本的均值向量, S w = ∑ j = 1 k S w j = ∑ j = 1 k ∑ x ∈ X j ( x − μ j ) ( x − μ j ) T S_w = \sum_{j=1}^k S_{wj} = \sum_{j=1}^k \sum_{x \in X_j} (x - \mu_j)(x - \mu_j)^T Sw=∑j=1kSwj=∑j=1k∑x∈Xj(x−μj)(x−μj)T 。
但是这里有一个问题,就是 W T S b W W^TS_bW WTSbW 和 W T S w W W^TS_wW WTSwW 都是矩阵,不是标量,我们无法把它作为一个标量函数来优化!也就是说,我们无法直接用二类LDA
的优化方法,怎么办呢?一般来说,我们可以用其他的一些优化目标来进行替换。
常见的一个LDA
多类优化目标函数定义为:
arg max ⏟ W J ( W ) = ∏ d i a g W T S b W ∏ d i a g W T S w W \underbrace{\arg \max}_W \; J(W) = \frac{\prod_{diag} W^TS_bW}{\prod_{diag} W^TS_wW} W argmaxJ(W)=∏diagWTSwW∏diagWTSbW
其中 ∏ d i a g A \prod_{diag} A ∏diagA 为 A A A 的主对角线元素的乘积, W W W 为 n × d n \times d n×d 的矩阵。
J ( W ) J(W) J(W) 的优化过程可以转化为:
J ( W ) = ∏ i = 1 d W i T S b W i ∏ i = 1 d W i T S w W i = ∏ i = 1 d W i T S b W i W i T S w W i J(W) = \frac{\prod_{i=1}^d W_i^TS_bW_i}{\prod_{i=1}^d W_i^TS_wW_i} = \prod_{i=1}^d \frac{W_i^TS_bW_i}{W_i^TS_wW_i} J(W)=∏i=1dWiTSwWi∏i=1dWiTSbWi=i=1∏dWiTSwWiWiTSbWi
仔细观察上式最右边的等式,这不就是广义瑞利商嘛!最大值是矩阵 S w − 1 S b S^{−1}_wS_b Sw−1Sb 的最大特征值,最大的 d d d 个这样的广义瑞利商的值的乘积就是矩阵 S w − 1 S b S^{−1}_wS_b Sw−1Sb 的最大的 d d d 个特征值的乘积,此时对应的矩阵 W W W 为这最大的 d d d 个特征值对应的特征向量张成的矩阵。
由于 W W W 是一个利用了样本的类别得到的投影矩阵,因此它降维能降到的维度 d d d 的最大值为 k − 1 k-1 k−1 。为什么最大维度不是类别数 k k k 呢?因为 S b S_b Sb 中每个 ( μ j − μ ) ( μ j − μ ) T (\mu_j − \mu)(\mu_j - \mu)^T (μj−μ)(μj−μ)T 的秩为 1 1 1 ,因此协方差矩阵相加后最大的秩为 k k k ( R a n k ( A + B ) ≤ R a n k ( A ) + R a n k ( B ) Rank(A + B) \leq Rank(A) + Rank(B) Rank(A+B)≤Rank(A)+Rank(B) ),但是由于如果我们知道前 k − 1 k-1 k−1 个 μ j \mu_j μj 后,最后一个 μ k \mu_k μk 可以由前 k − 1 k-1 k−1 个 μ j \mu_j μj 线性表示(因为这里我们给定样本之后,所有样本的均值 μ \mu μ 是已知的),因此 S b S_b Sb 的秩最大为 k − 1 k-1 k−1 ,即特征向量最多有 k − 1 k-1 k−1 个。
在第三小节和第四小节我们给大家介绍了LDA
的原理,现在我们对LDA
降维的流程做一个总结。
输入:数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( ( x m , y m ) ) } D=\{(x_1, y_1), (x_2, y_2), ..., ((x_m, y_m))\} D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 x i x_i xi 为 n n n 维向量, y i ∈ { C 1 , C 2 , . . . , C k } y_i \in \{C_1, C_2, ..., C_k\} yi∈{C1,C2,...,Ck} ,降维到的维度 d d d 。
输出:降维后的样本集 D ′ D' D′ 。
① 计算类内散度矩阵 S w S_w Sw;
② 计算类间散度矩阵 S b S_b Sb ;
③ 计算矩阵 S w − 1 S b S^{−1}_wS_b Sw−1Sb ;
④ 计算 S w − 1 S b S^{−1}_wS_b Sw−1Sb 的最大的 d d d 个特征值和对应的 d d d 个特征向量 ( w 1 , w 2 , . . . , w d ) (w_1, w_2, ..., w_d) (w1,w2,...,wd) ,得到投影矩阵 W W W ;
⑤ 对样本集中的每一个样本特征 x i x_i xi ,转化成为新的样本 z i = W T x i z_i=W^Tx_i zi=WTxi ;
⑥ 得到输出样本集 D ′ = { ( z 1 , y 1 ) , ( z 2 , y 2 ) , . . . , ( ( z m , y m ) ) } D′=\{(z_1, y_1), (z_2, y_2), ..., ((z_m, y_m))\} D′={(z1,y1),(z2,y2),...,((zm,ym))} 。
以上就是使用LDA
进行降维的算法流程。实际上LDA
除了可以用于降维以外,还可以用于分类。一个常见的LDA
分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA
进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为该样本的预测类别。
LDA
用于降维,和PCA
有很多相同,也有很多不同的地方,因此值得我们好好的比较一下两者的异同点。
首先我们看看相同点:
① 两者均可以对数据进行降维。
② 两者在降维时均使用了矩阵特征分解的思想。
③ 两者都假设数据符合高斯分布。
不同点:
① LDA
是有监督的降维方法,而PCA
是无监督的降维方法
② LDA
降维最多降到类别数k-1
的维数,而PCA
没有这个限制。
③ LDA
除了可以用于降维,还可以用于分类。
-④ LDA
选择分类性能最好的投影方向,而PCA
选择样本点具有最大方差的投影方向。
在某些数据分布下LDA
比PCA
的降维效果更优,如下图所示:
当然,某些某些数据分布下PCA
比LDA
的降维效果更优,如下图所示:
LDA
算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA
是一个有力的工具。下面总结下LDA
算法的优缺点。
LDA
算法的主要优点有:
① 在降维过程中可以使用类别的先验知识经验,而像PCA
这样的无监督学习则无法使用类别先验知识。
② LDA
在样本分类信息依赖均值而不是方差的时候,优于PCA
之类的降维算法。
LDA
算法的主要缺点有:
① LDA
不适合对非高斯分布样本进行降维,PCA
也有这个问题。
② LDA
降维最多降到类别数k-1
的维数,如果我们降维的维度大于k-1
,则不能使用LDA
。当然目前有一些LDA
的进化版算法可以绕过这个问题。
③ LDA
在样本分类信息依赖方差而不是均值的时候,降维效果不是很好。
④ LDA
可能过度拟合数据。
① 线性判别分析LDA原理总结 - 刘建平
② 线性代数之矩阵的属性和运算