Fisher’s linear discriminant通常也被称为Linear discriminant analysis (LDA)。LDA的目标是在保持类别信息的基础上降维。这跟PCA以及Factor analysisi很相似,都是降维。值得注意的是,LDA是完全不同的效果。而且LDA是监督学习。
原理介绍:
先定义两个方差。
看起来很复杂。其实就是求方差。第一个求的是每个分类之间的方差,是所有数据的均值。
是某类别内的均值。
指j类中数据量。
目标是,这个W要使得
最大。为什么最大就可以了呢。简单的说就是每个类的内部方差要尽量小,类之间的方差要大。详细推导见链接。
解法:
过程有点麻烦,反正是根据拉格朗日来的。可以见笔记。解为。这个方程叫Generalized eigenvalue problem。解法有很多。老师提到了一本叫 Matrix Computations的书,据说会让人很爽,里面有详细的说明。最简单的方法,是直接求
伪逆,就算
不可逆,这也是精确解。原式就变为
,这个就熟悉了,直接SVD即可。
实验:
no try no high! 果断来一发。首先假设有两类,这个有助于理解为什么这么做。没有必要两个类别中的数据量一样。写起来方便就设成一样了。可以看到效果如下图。可以看到这两个类还是有明显的界限的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | c = 2; X1 = [4,1;2,4;2,3;3,6;4,4;]; X2 = [9,10;6,8;9,5;8,7;10,8;]; % mean m1 = sum(X1) / size(X1,1) m2 = sum(X2) / size(X2,1) % with-in class covariance Sw = (X1 - m1)' * (X1 - m1) + (X2 - m2)' * (X2 - m2); % between-class covariance % Sb m = ( sum(X1) + sum(X2) ) / (size(X1,1) + size(X2,1)); Sb = 0; Sb = Sb + size(X1,1) * (m1 - m)' * (m1 - m); Sb = Sb + size(X2,1) * (m2 - m)' * (m2 - m); % the vector [u,lambda,v] = svd( pinv(Sw+Sb) * Sb); w = u(:,1) |
这个2类的不好玩啊。我曾经在2维数据上分5类,后来发现傻逼了。LDA做不了这事。LDA是降维到c-1。所以只能3类个3维数据到2维了。否则没法画啊。具体代码见github。效果如下。

PCA vs LDA:
最直观的解释如下所示:

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

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