主要是参考了文章
http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html
http://www.cnblogs.com/jerrylead/archive/2011/04/21/2024384.html
http://www.cnblogs.com/jerrylead/archive/2011/04/21/2024389.html
上面的三篇博客总结的已经非常好:
这里再将最重要的部分提出来总结一下:
LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近。要说明白LDA,首先得弄明白线性分类器(Linear
Classifier):因为LDA是一种线性分类器。对于K-分类的一个分类问题,会有K个线性函数:
当满足条件:对于所有的j,都有Yk > Yj,的时候,我们就说x属于类别k。对于每一个分类,都有一个公式去算一个分值,在所有的公式得到的分值中,找一个最大的,就是所属的分类了。
上式实际上就是一种投影,是将一个高维的点投影到一条高维的直线上,LDA最求的目标是,给出一个标注了类别的数据集,投影到了一条直线之后,能够使得点尽量的按类别区分开,当k=2即二分类问题的时候,如下图所示:
当x是二维的,我们就是要找一条直线(方向为w)来做投影,然后寻找最能使样本点分离的直线。如下图:
从直观上来看,右图比较好,可以很好地将不同类别的样本点分离。
计算过程不再讲解:主要是满足一个原则:
我们分类的目标是,使得类别内的点距离越近越好(集中),类别间的点越远越好。
拉格朗日乘子法的限制条件,带入得到:w是对应的低维的投影矩阵,Sb表示的原始数据类别中心点之间的距离,Sw表示的各个类别中数据点与其中心点的距离平方和
这样的式子就是一个求特征值的问题了。
对于N(N>2)分类的问题,我就直接写出下面的结论了:对于多类别的情况Sw并没有发生改变,Sb因为多类别,是利用全部数据算出来一个中心点计算距离平方和获得
PCA有很多种计算的方法,利用最大化方差,最小化损失法是利用了特征值求解的方法,和LDA相似
如果利用特征值分解,那么就是类似于SVD
对比一下PCA和LDA:
PCA与LDA,两者的思想和计算方法非常类似,但是一个是作为独立的算法存在,另一个更多的用于数据的预处理的工作。
LDA的实例:
PCA与LDA的降维对比:
PCA选择样本点投影具有最大方差的方向,LDA选择分类性能最好的方向。
LDA既然叫做线性判别分析,应该具有一定的预测功能,比如新来一个样例x,如何确定其类别?
拿二值分来来说,我们可以将其投影到直线上,得到y,然后看看y是否在超过某个阈值y0,超过是某一类,否则是另一类。而怎么寻找这个y0呢?
看
根据中心极限定理,独立同分布的随机变量和符合高斯分布,然后利用极大似然估计求
然后用决策理论里的公式来寻找最佳的y0,详情请参阅PRML。
这是一种可行但比较繁琐的选取方法,可以看第7节(一些问题)来得到简单的答案。
5. 使用LDA的一些限制
1、 LDA至多可生成C-1维子空间(这里应该是因为在多类别中计算特征变量的前提是Sb可逆,所以对秩有一定的要求)
LDA降维后的维度区间在[1,C-1],与原始特征数n无关,对于二值分类,最多投影到1维。
2、 LDA不适合对非高斯分布样本进行降维。
上图中红色区域表示一类样本,蓝色区域表示另一类,由于是2类,所以最多投影到1维上。不管在直线上怎么投影,都难使红色点和蓝色点内部凝聚,类间分离。
3、
LDA在样本分类信息依赖方差而不是均值时,效果不好。
上图中,样本点依靠方差信息进行分类,而不是均值信息。LDA不能够进行有效分类,因为LDA过度依靠均值信息。
4、 LDA可能过度拟合数据。