线性辨别模型(Linear Discriminant Analysis, 简称LDA)是一种经典的线性学习方法.
LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。在对新样本进行分类时,将其同样投影到这条直线上,再根据投影点的位置来确定类别.
下面两种投影方式,可以看出,右图要比左图的投影效果好.
二类LDA原理
假设我们的数据集,其中任意样本为n维向量,。我们定义为第j类样本的个数,为第j类样本的集合,而为第j类样本的均值向量,定义为第j类样本的协方差矩阵(严格说是缺少分母部分的协方差矩阵)。
的表达式为:
的表达式为:
由于是两类数据,因此我们只需要将数据投影到一条直线上即可。假设我们的投影直线是向量w,则对任意一个样本本,它在直线w的投影为,对于我们的两个类别的中心点,在直线w的投影为和。样本在 上的投影的协方差为:
由于LDA需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化,同时我们希望同一种类别数据的投影点尽可能的接近,也就是要同类样本投影点的协方差和尽可能的小,即最小化。综上所述,我们的优化目标为:
我们一般定义类内散度矩阵为:
同时定义类间散度矩阵为:
这样我们的优化目标重写为:
的形式为与的广义瑞利商.如果对线性代数熟悉的话,可以直接用广义瑞利商的性质求得的最大值.这里我们用比较常见的拉格朗日来求极值.
因为分子分母都是关于w的二次项,所以解与w的长度无关,仅与方向有关,所以我们可以任意缩放w.下面对w进行缩放,令
则优化函数可以写为:
求得拉格朗日方程:
令导数为0,可得:
注意到对于二类的时候,的方向恒为,不妨令,将其带入:,可以得到, 也就是说我们只要求出原始二类样本的均值和方差就可以确定最佳的投影方向w了。
考虑到数值解的稳定性,在实践中通常是对进行奇异值分解,即,这里是一个实对角矩阵,其对角线上的元素是的奇异值,然后再由求得的伪逆.
多类LDA原理
有了二类LDA的基础,我们再来看看多类别LDA的原理。
假设我们的数据集,其中任意样本xi为n维向量,。我们定义为第j类样本的个数,为第j类样本的集合,而为第j类样本的均值向量,定义为第j类样本的协方差矩阵。在二类LDA里面定义的公式可以很容易的类推到多类LDA。
由于我们是多类向低维投影,则此时投影到的低维空间就不是一条直线,而是一个超平面了。假设我们投影到的低维空间的维度为d,对应的基向量为,基向量组成的矩阵为W, 它是一个n×d的矩阵。
此时我们的优化目标应该可以变成为:
其中,为所有样本均值向量。
但是有一个问题,就是和都是矩阵,不是标量,无法作为一个标量函数来优化!也就是说,我们无法拉格朗日定理来优化,怎么办呢?一般来说,我们可以用其他的一些替代优化目标来实现。
常见的一个LDA多类优化目标函数定义为:
其中tr()表示矩阵的迹,W为n×d的矩阵。
J(W)的优化过程可以转化为:
仔细观察上式最右边,这不就是广义瑞利商嘛!最大值是矩阵的最大特征值,最大的d个值的乘积就是矩阵的最大的d个特征值的乘积,此时对应的矩阵W为这最大的d个特征值对应的特征向量张成的矩阵。
由于W是一个利用了样本的类别得到的投影矩阵,因此它的降维到的维度d最大值为k-1。为什么最大维度不是类别数k呢?因为中每个的秩为1,因此协方差矩阵相加后最大的秩为k(矩阵的秩小于等于各个相加矩阵的秩的和),但是由于如果我们知道前k-1个后,最后一个可以由前k-1个线性表示,因此的秩最大为k-1,即特征向量最多有k-1个。
编程实现:
https://www.kaggle.com/swimmingwhale/linear-discriminant-analysis
参考:
周志华-<机器学习>
https://www.cnblogs.com/pinard/p/6244265.html