写在前面:本文主要内容是LDA在机器学习领域的公式推导,仅当作笔记使用。
1. 简介
-
LDA(Linear Discriminant Analysis)是一种经典的线性学习方法,该算法属于监督算法。
- 给定训练集,设法将训练集投影到低维空间上,从而达到了降维的效果。
- 投影的结果要使同类样例的投影点尽可能接近、异类的投影点尽可能远离(同类相近、异类远离原则)。
- 下图给出了二维训练集投影到一维直线的效果图(图片来自《机器学习》周志华)
2. 算法内容(二分类)
- 给定数据集,其中。并定义:
- 第i类(1或0)示例的集合为
- 第i类示例集合的均值向量为
- 第i类示例集合的协方差矩阵
- 投影目标直线为
- 综上可以得到
- 两类样本中心在上的投影分别为和
- 两类样本协方差分别为和
- 直线为一维空间,则上述4项皆为实数
- 考虑同类相近、异类远离的原则,则只尽量同时需要满足1.同类样本协方差尽可能小;2.异类样本中心点尽可能远离。
- 协方差尽可能小即
- 中心店尽可能远离即
- 二者结合起来考虑,令
- (此处分子为欧几里德范式)
- 定义两个矩阵:
- 类内散度矩阵
- 类间散度矩阵
-
- 则J可以重写为
-
- 此时J为LDA最大化的目标,亦被称为“广义瑞利熵”。
- 类内散度矩阵
- 协方差尽可能小即
- 接下来针对J需要确定。
- 观察J的分子分母能够发现,最终的解与长度无关,只和其方向有关系,即仅与有关。令,可将J式可以转换为:
- 其中c为常数
- 利用拉格朗日乘子法,则上式可以进行推导:
- 其中为拉格朗日乘子。
- 对求偏导,并令该式为0可得
- 其中就是J的极值解。由于非奇异,可将该式两边同乘得到
- , 此时问题转化为求矩阵的特征值问题。利用的定义,可以化为
- ,其中为一标量,因此总是在向量方向。因此上式可以写做
- ,从而可得
- ,在寻找最佳投影方向的同时可以忽略的比例因子 。可得
- 观察J的分子分母能够发现,最终的解与长度无关,只和其方向有关系,即仅与有关。令,可将J式可以转换为:
3. 多类情况
- 多分类情况与二分类情况类似,其中与上节中的意义相同,重新定义了所有样本的均值由于存在多个类别,类间散度矩阵和类内散度矩阵的计算存在一定差异。假设有t类,t为实数。
- 类内散度矩阵(投影前):
- ,其中的表示第i类里的样本点相对于该类中心点的散列程度。并有。
- 类间散度矩阵(投影后:
- ,其中本身是值为的权重,但由于J式本身对倍数不敏感,因此取。
- 考虑到二类情况时投影目标是一条直线,而上升到多类情况后投影目标是多维的(可以认为是若干条直线)。J式的推导结论与上节中一样,此处求得的特征值越大,代表其对分类的判别能力越强,因此可以取特征值最大的前若干个特征向量构成矩阵。
多分类python代码实现:https://github.com/olddaddy/Linear-Discriminant-Analysis.git
如有错误望指正,谢谢。