一.原理简介
LDA线性判别分析,是一种监督学习算法,但在二分类问题上,由于最早由Ronald Fisher提出,
所以也称为Fisher判别分析(FDA),但LDA与FDA还是有些区别的,LDA假设各类样本数据都是
高斯分布,协方差矩阵相同且满秩。相比PCA,LDA是有监督的降维算法,即数据是有标签的(类
别标签)。
如下图所示的数据,根据PCA算法,数据应该映射到数据方差最大的方向,即垂直方向(红线方
向),但是图示中的两个类别将完全混合混在一起,很难区分开,这时候我们发现采用PCA算法来
解决问题的效果非常差,但是如果我们采用LDA,数据将映射到水平轴方向(蓝线方向),这时候
我们发现同类数据比较集中,不同类的数据被完全地分开,效果正如我们想要的那样。
二.二分类LDA原理推导
LDA主要是为了分类,所以相应的投影方向w,使得投影后的数据尽可能按照原始的类别进行分
开,我们仍从上面的二分类问题出发,我们假设两个类别的均值(中心)分别为、
。我们希望投影后两个类的距离尽可能大,这样易于区分,类间距离可以表
示为(、 表示两类中心在w方向上的投影向量),其中
,因此优化问题可以表示为:
为此我们定义类间散度矩阵为:(between-class scatter matrix)
类内散度矩阵:(within-class scatter matrix)
则目标函数可以转化为:
两种求解方法:
(1)拉格朗日乘子法:引入 ,则有
(本质上就是让除法迹的结果为λ,利用瑞利商求解)
再对w求导令其为0,可以得到以下等式:
(2)直接求导法:对w求偏导并令导数为0,则有
进一步化简可以得到:
利用瑞利商,令:
则最终也可以化为同样的广义等式:
如果类内散度矩阵可逆的话,我们可以得到:
从此处我们可以看出我们最大化的目标变成了一个矩阵的特征值,于是LDA降维变成了一个求矩阵
特征向量的问题,其中 对应于矩阵 最大的特征值,而投影方向就是这个特征值对
应的特征向量。而对于我们这个二分类问题,由于此情况下 方向始终与 方向一致,
如果我们只考虑w的方向而不考虑大小,则 ,因此我们只需要知道样本的均
值和类内方差即可得出最佳投影方差,这是Fisher在1936年提出的线性判别分析。
三.多分类LDA原理推导
按照我们之前的定义,当类别扩展到n个时,类内散度矩阵定义还是成立的,但类间散度矩阵的定
义就无法满足了,于是我们需要定义一个全局的散度矩阵来表示整体的散度,称为全局散度矩阵
,其中μ表示全部样本的中心,即所有中心的均值。
而根据我们之前的定义无法表示类间散度矩阵,不妨用投影之后每一类中心点与所有类中心点的距
离之和来衡量类间的距离,由于每一类的样本点数量可能不同,我们把每一类中心点与所有类中心
点的距离加上权值之后再求和,即类间距离可以表示为:
此时的类间散度矩阵表示的是每类中心到全局中心的加权和,而此时我们最大化类间距离既是使得
每个类的中心离全局中心最远,为此我们将最大化目标函数定为:
其中W是我们需要求的投影超平面,且满足 ,我们可以转化为如下广义特征值求解的方式进行求解:
求解得最佳投影平面W,即求得了 矩阵前k个最大特征值对应的特征向量组成的矩阵(k为
下降到的维数,也是投影向量的数量)。
四.证明St=Sw+Sb
总体散度矩阵本质上就是PCA的优化目标,要证明 ,即证明 。
已知:
则有:
即证
五.算法流程
输入:数据集 ,其中 为n维向量,为类别标签,降
至的维度为k维;
Ⅰ.计算数据集每个类别的均值向量 和总体均值向量 ;
Ⅱ.计算类内散度矩阵,全局散度矩阵 ,并得到类间散度矩阵 ;
Ⅲ.对矩阵 进行特征值分解,并将特征值从大到小进行排序;
Ⅳ.取前k大的特征值对应的特征向量,并通过 将n维样本降至k维。
六.LDA的几个等价模型(个人理解)
七.LDA用于人脸识别
LDA用于人脸识别与PCA相似,主要也是靠它的降维矩阵,通过设置降维的维度选取不同数量的特
征向量组成投影矩阵。但值得注意的是这个所得特征数量受限于样本的类别数,最多只能获得样本
类别数减一数量的特征维数。人脸识别的大致过程为:
(1)首先将数据集按一定比例划分为训练集和测试集;
(2)将人脸图片按列向量读入成一个矩阵;
(3)用LDA从训练集中提取一定数量的特征向量组成投影矩阵;
(4)用测试集的人脸图片进行测试,即将其用得到的特征矩阵进行投影,用分类器(一般用KNN
对其进行分类,与正确标签进行比较正确与否,从而计算人脸识别的正确率。
详细代码可见:Machine_Learning/code/LDA at main · breakthrougher/Machine_Learning (github.com)
----- 以上为本人学习机器学习这门课总结出的一些知识点和手敲的代码,有错误或者疑问可以评论区交流,欢迎指正!!!