机器学习--线性判别分析

​ 在前面的博文中,我们介绍了一种经典的用于线性分类的方法--感知机。这篇博文中,我们介绍另外一种用于线性分类的方法:线性判别分析。其主要思想就是找到一条直线,把所有的样本投影到该直线上,使得同类型的样本尽可能近,非同类型的样本尽可能远。对于数据集\(D=\{((x_1,y_1), \cdots,(x_N,y_N)\}\)而言,定义\(\mathbf{X=[x_1,\cdots,x_N]}^T\),\(\mathbf{Y}=[y_1,\cdots,y_N]^T\)为数据集对应的标签,另外数据集可以分为两类,其中\(y_i=1\)的样本集为\(c_1={(x_i|y_i=1)}\),其样本个数为\(N_1\),另外\(y_i=-1\)的样本集为\(c_2=(x_i|y_i=-1)\),其样本个数为\(N_2\).线性判别分析的原则就是让类内方差足够小,类间方差足够大。

​ 首先对于样本点\(x_i\),定义\(z_i\)

\[z_i=\mathbf{w}^Tx_i\quad s.t. \lvert\lvert \mathbf{w} \rvert\rvert=1 \]

那么均值和方差可以表示成

\[\bar{Z}=\frac{1}{N}\sum_{i=1}^{N}\mathbf{w}^Tx_i\\S_z=\frac{1}{N}\sum_{i=1}^{N}(z_i-\bar{Z})(z_i-\bar{Z})^T \]

那么样本数据集\(c_1\)和样本数据集\(c_2\)的均值和方差可以分别表示成

\[\bar{Z}_1=\frac{1}{N_1}\sum_{i=1}^{N_1}\mathbf{w}^{T}x_i\\S_1=\frac{1}{N_1}\sum_{i=1}^{N_1}(z_i-\bar{Z}_{1})(z_i-\bar{Z}_{1})^T\\\bar{Z}_2=\frac{1}{N_2}\sum_{i=1}^{N_2}\mathbf{w}^{T}x_i\\S_2=\frac{1}{N_2}\sum_{i=1}^{N_2}(z_i-\bar{Z}_{2})(z_i-\bar{Z}_{2})^T\\ \]

那么根据类内小,类间大的原则,定义如下的损失函数\(J(w)\)

\[J(w)=\frac{(\bar{Z}_1-\bar{Z}_{2})^2}{S_1+S_2} \]

通过最大化\(J(w)\),得到权重系数\(w\)

\[\hat{\mathbf{w}}=argmax \quad J(w) \]

首先分子可以化简成

\[(\bar{Z}_1-\bar{Z}_2)^2=(\frac{1}{N_1}\sum_{i=1}^{N_1}\mathbf{w}^Tx_i-\frac{1}{N_2}\sum_{i=1}^{N_2}\mathbf{w}^Tx_i)^2\\=\mathbf{w}^T(X_{c_{1}}-X_{c_2})(X_{c_{1}}-X_{c_2})^T\mathbf{w} \]

首先化简\(S_1\),可以表示成

\[S_1=\frac{1}{N_1}\sum_{i=1}^{N_1}(\mathbf{w}^Tx_i-\bar{Z}_1)(\mathbf{w}^Tx_i-\bar{Z_2})^T\\=\frac{1}{N_1}\sum_{i=1}^{N1}(\mathbf{w}^Tx_i-\frac{1}{N_1}\sum_{j=1}^{N_1}\mathbf{w}^Tx_j)(\mathbf{w}^Tx_i-\frac{1}{N_1}\sum_{j=1}^{N_1}\mathbf{w}^Tx_j)^T\\\frac{1}{N_1}\sum_{i=1}^{N_1}\mathbf{w}^T(x_i-\frac{1}{N_1}\sum_{j=1}^{N_1}x_j)(x_i-\frac{1}{N_1}\sum_{j=1}^{N_1}x_j)\mathbf{w}\\=\mathbf{w}^TS_{c_1}\mathbf{w} \]

其中\(S_{c_1}\)表示样本数据集\(c_1\)的样本协方差矩阵。同理可得\(S_2\)可以化简成

\[S_2=\mathbf{w}^TS_{c_2}\mathbf{w} \]

\(S_{c_2}\)表示样本数据集\(c_2\)的样本协方差矩阵。这样就可以将\(J(w)\)表示成

\[J(w)=\frac{\mathbf{w}^T(X_{c_{1}}-X_{c_2})(X_{c_{1}}-X_{c_2})^T\mathbf{w}}{\mathbf{w}^T(S_{c_1}+S_{c_2})\mathbf{w}}\\J(w)=\frac{\mathbf{w}^TS_b\mathbf{w}}{\mathbf{w}^TS_w\mathbf{w}} \]

其中\(S_w\)表示类内方差,\(S_b\)表示类间方差。那么

\[J(w)=\mathbf{w}^TS_b\mathbf{w}(\mathbf{w}^TS_w\mathbf{w})^{-1}\\ \]

然后对\(J(w)\)求偏导,然后令偏导数为0,可以得到\(\mathbf{w}\)的解为

\[\mathbf{w}=\frac{\mathbf{w}^TS_w\mathbf{w}}{\mathbf{w}^TS_b\mathbf{w}}(S_w^{-1}S_b\mathbf{w}) \]

因为\(\mathbf{w}^TS_w\mathbf{w}\)的乘积是一个实数,那么\(\mathbf{w}\)就可以进一步表示成

\[\mathbf{w} \varpropto S_w^{-1}S_b\mathbf{w}\\\rightarrow \mathbf{w} \varpropto S_w^{-1}(X_{c_{1}}-X_{c_2})(X_{c_{1}}-X_{c_2})^T\mathbf{w} \]

\((X_{c_{1}}-X_{c_2})^T\mathbf{w}\)的结果是一个实数,对方向并没有影响,那么就可以得到

\[\mathbf{w} \varpropto S_w^{-1}(X_{c_{1}}-X_{c_2}) \]

因为只需要求得\(S_w^{-1}(X_{c_{1}}-X_{c_2})\),就可以得到\(\mathbf{w}\).

你可能感兴趣的:(机器学习--线性判别分析)