经典机器学习算法:线性判别分析LDA

参考csdn博客:线性判别分析(LDA)基本原理及实现

一、模型

线性判别分析LDA是二分类的线性分类模型。

LDA:Linear Discrimant Analysis

LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的,这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”,如下图所示。
在这里插入图片描述

在 LDA 中,我们要将数据在低维度上进行投影,投影后的数据需要满足两个条件,从而可以更好地分类:

  1. 每一种类别数据的投影点尽可能的接近。
  2. 不同类别的数据的类别中心之间的距离尽可能的大。

二、推导

投影

在这里插入图片描述

首先是投影,我们假定原来的数据是向量 x x x,那么顺着 w w w 方向的投影就是标量:
投 影 = ∣ x ∣ cos ⁡ θ = w T ⋅ x ∣ w ∣ 投影 = |x|\cos\theta =\frac{w^T\cdot x}{|w|} =xcosθ=wwTx
∣ ∣ w ∣ ∣ = 1 ||w|| = 1 w=1时,投影 = w T ⋅ x w^T\cdot x wTx

我们的目标模型是: z = w T ⋅ x z=w^T\cdot x z=wTx = 投影

根据 z z z所要满足的几何关系,求解 w w w

减小类内方差

相同类内部的样本更为接近,我们假设属于两类的试验样本数量分别是 N 1 N_1 N1 N 2 N_2 N2,那么我们采用方差矩阵来表征每一个类内的总体分布,这里我们使用了方差的定义,用 S S S 表示原数据的方差:
C 1 : V a r z [ C 1 ] = 1 N 1 ∑ i = 1 N 1 ( z i − z c 1 ‾ ) ( z i − z c 1 ‾ ) T = 1 N 1 ∑ i = 1 N 1 ( w T x i − 1 N 1 ∑ j = 1 N 1 w T x j ) ( w T x i − 1 N 1 ∑ j = 1 N 1 w T x j ) T = w T 1 N 1 ∑ i = 1 N 1 ( x i − x c 1 ‾ ) ( x i − x c 1 ‾ ) T w = w T S 1 w C 2 : V a r z [ C 2 ] = 1 N 2 ∑ i = 1 N 2 ( z i − z c 2 ‾ ) ( z i − z c 2 ‾ ) T = w T S 2 w \begin{aligned} C_1:Var_z[C_1]&=\frac{1}{N_1}\sum\limits_{i=1}^{N_1}(z_i-\overline{z_{c1}})(z_i-\overline{z_{c1}})^T\\ &=\frac{1}{N_1}\sum\limits_{i=1}^{N_1}(w^Tx_i-\frac{1}{N_1}\sum\limits_{j=1}^{N_1}w^Tx_j)(w^Tx_i-\frac{1}{N_1}\sum\limits_{j=1}^{N_1}w^Tx_j)^T\\ &=w^T\frac{1}{N_1}\sum\limits_{i=1}^{N_1}(x_i-\overline{x_{c1}})(x_i-\overline{x_{c1}})^Tw\\ &=w^TS_1w\\ C_2:Var_z[C_2]&=\frac{1}{N_2}\sum\limits_{i=1}^{N_2}(z_i-\overline{z_{c2}})(z_i-\overline{z_{c2}})^T\\ &=w^TS_2w \end{aligned} C1:Varz[C1]C2:Varz[C2]=N11i=1N1(zizc1)(zizc1)T=N11i=1N1(wTxiN11j=1N1wTxj)(wTxiN11j=1N1wTxj)T=wTN11i=1N1(xixc1)(xixc1)Tw=wTS1w=N21i=1N2(zizc2)(zizc2)T=wTS2w
所以类内距离可以记为:
V a r z [ C 1 ] + V a r z [ C 2 ] = w T ( S 1 + S 2 ) w \begin{aligned} Var_z[C_1]+Var_z[C_2]=w^T(S_1+S_2)w \end{aligned} Varz[C1]+Varz[C2]=wT(S1+S2)w

增大类间距离

不同类别的数据的类别中心之间的距离尽可能的大。我们可以用两类的均值表示这个距离:
( z c 1 ‾ − z c 2 ‾ ) 2 = ( 1 N 1 ∑ i = 1 N 1 w T x i − 1 N 2 ∑ i = 1 N 2 w T x i ) 2 = ( w T ( x c 1 ‾ − x c 2 ‾ ) ) 2 = w T ( x c 1 ‾ − x c 2 ‾ ) ( x c 1 ‾ − x c 2 ‾ ) T w \begin{aligned} (\overline{z_{c1}}-\overline{z_{c2}})^2&=(\frac{1}{N_1}\sum\limits_{i=1}^{N_1}w^Tx_i-\frac{1}{N_2}\sum\limits_{i=1}^{N_2}w^Tx_i)^2\\ &=(w^T(\overline{x_{c1}}-\overline{x_{c2}}))^2\\ &=w^T(\overline{x_{c1}}-\overline{x_{c2}})(\overline{x_{c1}}-\overline{x_{c2}})^Tw \end{aligned} (zc1zc2)2=(N11i=1N1wTxiN21i=1N2wTxi)2=(wT(xc1xc2))2=wT(xc1xc2)(xc1xc2)Tw

损失函数

综合这两点,由于协方差是一个矩阵,于是我们用将这两个值相除来得到我们的损失函数,并最大化这个值
w ^ = a r g m a x w J ( w ) = a r g m a x w ( z c 1 ‾ − z c 2 ‾ ) 2 V a r z [ C 1 ] + V a r z [ C 2 ] = a r g m a x w w T ( x c 1 ‾ − x c 2 ‾ ) ( x c 1 ‾ − x c 2 ‾ ) T w w T ( S 1 + S 2 ) w \begin{aligned} \hat{w}=\mathop{argmax}\limits_wJ(w)&=\mathop{argmax}\limits_w\frac{(\overline{z_{c1}}-\overline{z_{c2}})^2}{Var_z[C_1]+Var_z[C_2]}\\ &=\mathop{argmax}\limits_w\frac{w^T(\overline{x_{c1}}-\overline{x_{c2}})(\overline{x_{c1}}-\overline{x_{c2}})^Tw}{w^T(S_1+S_2)w}\\ \end{aligned} w^=wargmaxJ(w)=wargmaxVarz[C1]+Varz[C2](zc1zc2)2=wargmaxwT(S1+S2)wwT(xc1xc2)(xc1xc2)Tw
这样,我们就把损失函数和原数据集以及参数结合起来了。 S b S_b Sb为类间方差, S w S_w Sw为类内方差。
a r g m a x w J ( w ) = a r g m a x w w T S b w w T S w w , S b = ( x c 1 ‾ − x c 2 ‾ ) , S w = ( S 1 + S 2 ) \mathop{argmax}\limits_wJ(w)=\mathop{argmax}\limits_w\frac{w^TS_bw}{w^TS_ww},S_b = (\overline{x_{c1}}-\overline{x_{c2}}),S_w=(S_1+S_2) wargmaxJ(w)=wargmaxwTSwwwTSbw,Sb=(xc1xc2),Sw=(S1+S2)
下面对这个损失函数求偏导,注意我们其实对 w w w 的绝对值没有任何要求,只对方向有要求,因此只要一个方程就可以求解了
∂ ∂ w J ( w ) = ∂ ∂ w w T S b w ( w T S w w ) − 1 = 2 S b w ( w T S w w ) − 1 − 2 w T S b w ( w T S w w ) − 2 S w w = 0 ⟹ S b w ( w T S w w ) = ( w T S b w ) S w w ( 约 掉 重 复 项 ) ⟹ w ∝ S w − 1 S b w = S w − 1 ( x c 1 ‾ − x c 2 ‾ ) ( x c 1 ‾ − x c 2 ‾ ) T w ∵ ( x c 1 ‾ − x c 2 ‾ ) T w = 实 数 ( 行 向 量 乘 于 列 向 量 ) ⟹ w ∝ S w − 1 ( x c 1 ‾ − x c 2 ‾ ) = S w − 1 S b \begin{aligned} \frac{\partial}{\partial w}J(w)&=\frac{\partial}{\partial w}w^TS_bw(w^TS_ww)^{-1}\\ &=2S_bw(w^TS_ww)^{-1}-2w^TS_bw(w^TS_ww)^{-2}S_ww\\ &=0\\ &\Longrightarrow S_bw(w^TS_ww)=(w^TS_bw)S_ww(约掉重复项)\\ &\Longrightarrow w\propto S_w^{-1}S_bw=S_w^{-1}(\overline{x_{c1}}-\overline{x_{c2}})(\overline{x_{c1}}-\overline{x_{c2}})^Tw\\ &\because (\overline{x_{c1}}-\overline{x_{c2}})^Tw =实数(行向量乘于列向量) \\ &\Longrightarrow w\propto S_w^{-1}(\overline{x_{c1}}-\overline{x_{c2}})=S_w^{-1}S_b \end{aligned} wJ(w)=wwTSbw(wTSww)1=2Sbw(wTSww)12wTSbw(wTSww)2Sww=0Sbw(wTSww)=(wTSbw)SwwwSw1Sbw=Sw1(xc1xc2)(xc1xc2)Tw(xc1xc2)Tw=(wSw1(xc1xc2)=Sw1Sb
于是 S w − 1 S b S_w^{-1}S_b Sw1Sb 就是我们需要寻找的方向。最后可以归一化求得单位的 w w w 值( w w w p ∗ 1 p*1 p1列向量)。

找到方向所对应的向量,就是所要投影的那条线所对应的向量,接下来就可以进行二分类了。

猜你喜欢

转载自blog.csdn.net/weixin_43999137/article/details/108064646