本小节为线性分类的第三小节,主要推导了线性判别分析算法,也就是Fisher算法。Fisher算法的主要思想是:{ 类内小,类间大。}这有点类似于,软件过程里的松耦合,高内聚的思想。这个思想转换成数学语言也就是,同一类数据之间的方差要小,不同类数据之间的均值的差距要大。那么,我们对数据的描述如下所示:
X=(x1,x2,⋯,xN)T=(xT1xT2⋮xTN)=(x11x12…x1px21x32…x2p⋮⋮⋱⋮xN1xN2…xNp)N×P那么,我们的数据集可以记为$\left{ (x_i,y_i) \right}{i=1}^N,其中,x_i \in \mathbb{R}^p,y_i\in{+1,-1},且{y=+1}为C_1类,且{y=-1}为C_2类。那么,X{c_1}被定义为\left{ x_i | y_i=+1 \right},X_{c_2}被定义为\left{ x_i | y_i=-1 \right}。所以,很显然可以得到 | X_{c_1} | =N_1, | X_{c_2} | =N_2,并且N_1+N_2=N$。 |
Fisher线性判别分析}
\begin{figure}[H] \centering \includegraphics[width=.55\textwidth]{微信图片_20191031095624.png} \caption{Fisher线性判别分析模型图} \label{fig:my_label_1} \end{figure}在左图中,我们设置了两个投影方向,很显然上面那个投影方向可以更好的将两个点之间分开。我们可以在投影方向上找一个点作为两个类别的分界点,也就是阈值(Threshhold)。首先,我们先引入一个有关投影算法的小知识。
投影算法}
首先,我们需要设定一个投影向量w,为了保险起见,对这个投影向量w作出约束,令||w||=1。那么,在空间中的一个数据点,也就是一个向量,在投影向量上的投影长度可以表述为:
xi⋅w=|xi||w|cosθ=|xi|cosθ=△Fisher判别分析的损失函数表达式}
在这个部分,主要是要得出Fisher判别分析的损失函数表达式求法。对于,投影的平均值和方差,我们可以分别表述为:
\Barz=1NN∑i=1zi=1NN∑i=1wTxiSz=1NN∑i=1(zi−\Barz)(zi−\Barz)T那么对于第一类分类点Xc1和第二类分类点Xc2可以表述为:
C1:\Barz1=1N1N1∑i=1wTxiS1=1N1N∑i=1(zi−\Barz1)(zi−\Barz1)T那么类间的距离我们可以定义为:(\Barz1−\Barz2)2, 类内的距离被我们定义为S1+S2。那么我们的目标函数Target Function J(w),可以被定义为:
J(w)=(\Barz1−\Barz2)2S1+S2因为,我们的目的是使方差越小越好,均值之间的差越大越好。
损失函数表达式的化简}
(\Barz1−\Barz2)2}
分子的化简过程如下所示:
(\Barz1−\Barz2)2=(1N1N1∑i=1wTxi−1N2N2∑i=1wTxi)2=(wT(1N1N1∑i=1xi−1N2N2∑i=1xi))2=(wT(\BarXc1−\BarXc2))2=wT(\BarXc1−\BarXc2)(\BarXc1−\BarXc2)TwS1+S2}
分母的化简过程如下所示:
S1=1N1N∑i=1(zi−\Barz1)(zi−\Barz1)T=1N1N∑i=1(wTxi−1N1N1∑i=1wTxi)(wTxi−1N1N1∑i=1wTxi)T=wT1N1N∑i=1(xi−1N1N1∑i=1xi)(xi−1N1N1∑i=1xi)Tw=wTSc1w同理可得,
S1=wTSc2w所以,
S1+S2=wT(Sc1+Sc2)wJ(w)的最简表达形式}
J(w)=wT(\BarXc1−\BarXc2)(\BarXc1−\BarXc2)TwwT(Sc1+Sc2)w令Sb为between-class类间方差,Sw为within-class,也就是类内方差。那么有
Sb=(\BarXc1−\BarXc2)(\BarXc1−\BarXc2)TSw=(Sc1+Sc2)于是,我们可以得到进一步化简的表达式;
J(w)=wTSbwwTSww损失函数J(w)的梯度}
为了方便求导,我们令J(w)=(wTSbw)(wTSww)−1。
∂J(w)∂w=2Sbw(wTSww)−1+(−1)(wTSbw)(wTSww)−2(2)Sww=0Sbw(wTSww)−1=(wTSbw)(wTSww)−2Sww显然,w的维度是p×1,wT的维度是1×p,Sw的维度是p×p,所以,wTSww是一个实数,同理 可得,wTSww是一个实数所以,可以得到
Sbw=(wTSbw)(wTSww)−1SwwSbw=(wTSbw)(wTSww)Sww我们主要是求得梯度的方向,大小不是很重要了。所以,我们可得
w=(wTSbw)(wTSww)S−1bSww∝S−1bSww而$(\Bar{X}{c_1} - \Bar{X}{c_2})^Tw$是一个实数,所以汇总可得
S−1bSww∝S−1w(\BarXc1−\BarXc2)那么,我们就可以求得梯度的方向为$S_w^{-1}(\Bar{X}{c_1} - \Bar{X}{c_2})。如果,S_w^{-1}是一个各向同性的对角矩阵,那么S^{-1}\propto I。所以,w\propto (\Bar{X}{c_1} - \Bar{X}{c_2})$。既然,求得了梯度的方向,其实梯度的大小就不重要的。