线性判别分析(LDA)最全解读+python实战二分类代码! |
文章目录
- 一、主要思想!
- 二、具体处理流程!
- 三、补充二中的公式的证明!
- 四、目标函数的求解过程!
- 4.1、优化问题的转化
- 4.2、拉格朗日乘子法求解
- 五、拓展到多分类任务中
- 六、Fisher实战分析:二分类
- 6.1、数据生成
- 6.2、fisher算法
- 6.3、判断类别
- 6.4、绘图
- 6.5、运行结果
- 参考文章
- 补充:矩阵求导可以参考
一、主要思想!
- 线性判别分析(
Linear Discriminant Analysis
简称LDA
)是一种经典的线性学习方法,在二分类问题上因为最早由【Fisher
,1936年】提出,所以也称为“Fisher
判别分析!”
Fisher(费歇)判别思想是投影,使多维问题简化为一维问题来处理。选择一个适当的投影轴,使所有的样本点都投影到这个轴上得到一个投影值。对这个投影轴的方向的要求是:使每一类内的投影值所形成的类内离差尽可能小,而不同类间的投影值所形成的类间离差尽可能大。
图摘自周志华老师的《机器学习》一书 |
- 简单介绍:
LDA
的思想非常的朴素,给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异类样例的投影点尽可能的远离;在对新鲜样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别,上图中给出了一个二维示意图。 - 我们寻找一个投影方向 (
二、具体处理流程!
- 为了找到最佳投影方向,需要计算出 各类样本均值、样本类内离散度矩阵 和样本总类内离散度矩阵 、样本类间离散度矩阵 ,根据
Fisher
准则,找到最佳投影向量,将训练集内的所有样本进行投影,投影到一维Y
空间,由于Y
空间是一维的,则需要求出Y
空间的划分边界点,找到边界点后,就可以对待测样本进行一维Y
空间投影,判断它的投影点与分界点的关系,将其归类。具体方法如下(以两类问题为例子): - ①. 计算各类样本均值向量 ,是各个类的均值,是类的样本个数。
- ②. 计算样本类内离散度矩阵 和总类内离散度矩阵
- ③. 计算样本类间离散度矩阵。
-
④. 求投影方向向量 (维度和样本的维度相同)。我们希望投影后,在一维
Y
空间里各类样本尽可能分开,就是我们希望的两类样本均值之差 越大越好,同时希望各类样本内部尽量密集,即是:希望类内离散度越小越好。因此,我们可以定义Fisher准则函数为:
- 使得 取得最大值的
- ⑤. 将训练集内所有样本进行投影。
- ⑥. 计算在投影空间上的分割阈值 ,在一维Y空间,各类样本均值
注意:对于二类问题,此时类内离散度不再是一个矩阵,而是一个值。还有可以发现: 和都是对称矩阵,故
- 样本类内离散度 和总类内离散度
- 而此时类间离散度就成为两类均值差的平方。
- 阈值的选择可以有不同的方案:
- ①. 比较常用的一种是:
- ②. 另外一种是
- ⑦. 对于给定的测试样本 ,计算出它在 上的投影点 。
- ⑧. 根据决策规则分类!
三、补充二中的公式的证明!
- 刚才我们提到过,希望寻找的投影方向使投影以后两类尽可能的分开,而各类内部由尽可能聚集,这一目标函数可表示为如下的准则(
Fisher
准则函数):
- 其中:
- 以及下面的公式:
- 因此,
Fisher
判别准则(目标函数)变为:这一表达式在数学物理中称为广义Rayleigh
商(generalized Rayleigh quotient
)
四、目标函数的求解过程!
4.1、优化问题的转化
- 我们的目标就是求得使 最大的投影方向 , 由于对 的幅值调节并不会影响的方向,即不会影响,因此可以设定式 的分母为非0常数(设置为 ),最大化分子部分,即把式 的优化问题转化为下面的
4.2、拉格朗日乘子法求解
- 这是一个等式约束下的极值问题,可以通过引入拉格朗日(
lagrange
)乘子转化为以下拉个朗日函数的无约束极值问题:
- 在式
- 由此得到,极值解 ,应该满足:
- 又 ,则
注意:这里可以参考*的矩阵演算:Scalar-by-matrix identities;这里求导用的公式:
- 令偏导数等于0
- 假定 是非奇异的(样本数大于维数时通常是非奇异的),可以得到
- 也就是说, 是矩阵 的本征向量。我们把式 的 代入,式
- 应该注意到, 是标量。不影响 的方向,因此可以得到 的方向是由 决定的,由于我们只关心 的方向,因此可以取如下,这就是Fisher判别准则下的最优投影方向。
注意:考虑到数值解的稳定性,实践中通常对 进行奇异值分解,即:,这里的 是一个实对角矩阵,其对角线上的元素是 的奇异值,然后由 得到 。
五、拓展到多分类任务中
- 假设类别变成多个了,那么要怎么改变,才能保证投影后类别能够分离呢?我们之前讨论的是如何将 维降到一维,现在类别多了,一维可能已经不能满足要求。假设我们有 个类别,将其投影到
- 将这 个向量表示为:
- 投影上的结果表示为:;简写之:
- 我们打算仍然从类间散列度和类内散列度来考虑。为了便于分析,假设样本向量包含2个特征值时,从几何意义上考虑:
多分类图 |
- 假定存在 个类,属于第 个类的样本集合为 ,中的样例的集合为 ,则有: ,其中为样本总数,设 表示类别为 , 的样例的集合。这些样例的均值向量为:
- 要使同类样本的投影点尽可能的接近,则可以使同类样本投影点方差尽可能小,因此定义类别的类内散度矩阵为:
- 总类内散度矩阵为:
注意: 类别的类内散度矩阵,实际就等于样本集 的协方差矩阵 ,协方差矩阵大小为:,每个样本点的维度为n。
- 要使异类样本的投影点尽可能的远,则可以使异类样本的中心的投影点尽可能的远,由于这里不止2个中心点,因此不能简单的套用二类LDA的做法(即2个中心点的距离)。这里使用每一类样本集合的中心点距离总的样本中心点的距离作为度量。 考虑到每一类样本集的大小可能不同(密度分布不均;如果某类里面的样本点较多,那么其权重稍大,权重用表示,但由于对倍数不敏感,因此使用。),因此定义类间散度矩阵为:
其中: 是所有的样本均值。
注意: 也是一个协方差矩阵,它刻画的是第个类与总体之间的关系! 具体的推导过程参考===:南瓜书
- 设 是投影矩阵,经过推导可以得到最大化的目标:(注意:此公式是的推广形式!)
- 参考:有些人使用的是行列式,这里使用的是矩阵的迹。 由于我们得到的分子分母都是散列矩阵,要将矩阵变成实数,需要取行列式。又因为行列式的值实际上是矩阵特征值的积,一个特征值可以表示在该特征向量上的发散程度。因此我们使用行列式来计算(此处我感觉有点牵强,道理不是那么有说服力)。
- 其中: 表示矩阵的迹,一个矩阵的迹就是一个矩阵的对角线元素之和,它是一个矩阵不变量,也等于矩阵所有的特征值之和。
- 还有一个常用的矩阵不变量,就是矩阵的行列式,它等于矩阵的所有特征值之积。
- 多分类LDA将样本投影到 维空间,因此它是一种经典的监督降维技术,之所以叫监督是因为对于每个训练样本,我们知道它所属的类别。
六、Fisher实战分析:二分类
6.1、数据生成
- 这里直接用scikit-learn的接口来生成数据:
- 断点演示:
6.2、fisher算法
注意: 类间散度矩阵也是一个协方差矩阵,他刻画的是第
6.3、判断类别
6.4、绘图
6.5、运行结果
二分类运行结果 |
参考文章
- 周志华《机器学习》
- 张学工《模式识别》
- 杨淑莹《模式识别与智能计算》
- JerryLead-线性判别分析(Linear Discriminant Analysis)(一)
- fisher判别分析原理+python实现
补充:矩阵求导可以参考
- 【机器学习】汇总详解:矩阵的迹以及迹对矩阵求导都是讨论的方阵