Fisher’s linear discriminant

      Fisher’s linear discriminant通常也被称为Linear discriminant analysis (LDA)。LDA的目标是在保持类别信息的基础上降维。这跟PCA以及Factor analysisi很相似,都是降维。值得注意的是,LDA是完全不同的效果。而且LDA是监督学习。

原理介绍:

      先定义两个方差。

    \begin{align*} between-class \quad covariance:\quad\quad & S_b = \sum\limits_{j=1}^c n_j*(m_j - m)*(m_j - m)^T       \\ with-in \quad class\quad covariance:\quad\quad &S_w = \sum\limits_{j=1}^c\sum\limits_{i\in V_j} (x_i-m_j )*(x_i-m_j)^T  \end{align*}

      看起来很复杂。其实就是求方差。第一个求的是每个分类之间的方差,m = \sum\limits_{i=1}^n x_i是所有数据的均值。m_j =\cfrac{1}{n_j} \sum\limits_{i\in V_j} x_i是某类别内的均值。n_j指j类中数据量。

      目标是y = W^TX,这个W要使得J(W) =tr(\cfrac{W^T*S_b*W}{W^T*S_w*W})最大。为什么最大就可以了呢。简单的说就是每个类的内部方差要尽量小,类之间的方差要大。详细推导见链接。

解法:

      过程有点麻烦,反正是根据拉格朗日来的。可以见笔记。解为S_b*W = S_w*W*\Lambda。这个方程叫Generalized eigenvalue problem。解法有很多。老师提到了一本叫 Matrix Computations的书,据说会让人很爽,里面有详细的说明。最简单的方法,是直接求S_t=S_w+S_b伪逆,就算S_t不可逆,这也是精确解。原式就变为pinv(S_t) * S_b*W = W*\Lambda,这个就熟悉了,直接SVD即可。

实验:

      no try no high! 果断来一发。首先假设有两类,这个有助于理解为什么这么做。没有必要两个类别中的数据量一样。写起来方便就设成一样了。可以看到效果如下图。可以看到这两个类还是有明显的界限的。

lda
2 class lda

      这个2类的不好玩啊。我曾经在2维数据上分5类,后来发现傻逼了。LDA做不了这事。LDA是降维到c-1。所以只能3类个3维数据到2维了。否则没法画啊。具体代码见github。效果如下。

origin
LDA Origin Class

projection projection2

PCA vs LDA:

      最直观的解释如下所示:

pcavslda
pca vs lda. From:LSV

      PCA是抽取主要的特征,要取方差最大的方向,不管类别间的差别。而LDA则是根据类别来降维。有本质上的区别。可以看一下3维数据在PCA和LDA方法下的结果。

pca-vs-lda
pca vs lda

Fisher:

      Ronald Aylmer Fisher在统计方面贡献很大。他设计了一个随机实验叫Lady Tasting Tea,是在一本名为《The Design of Experiments》书中提到。然后我们上课的老师说Fisher写了一本书叫《The Lady Tasting Tea》,其实不是他写的,但根据评论来看确实是一本好书,介绍了统计学的发展。

链接:

  1. PCA and LDA, PCA and LDA
  2. Linear discriminants analysis
  3. Fisher Origin Paper