我们都知道机器学习算法的性能受到样本数据的特征维数的影响,特征维数越多,需要的训练数据也越大,机器学习算法所消耗的时间也越多,甚至成指数爆炸增长。同时过多的特征维数之间也可能存在相互关联的特征和一些噪声。因此,在训练机器学习算法之前,通常我们会对样本数据进行预处理,数据降维就是通常需要完成的一步。
线性判别分析属于有监督学习算法,也就是对于每一个给定的n维样本 x(i)(x(i)1,x(i)2,...,x(i)n) x ( i ) ( x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ) 都有一个与之对应的期望值或者类别标签 y(i) y ( i ) 。LDA的思想非常朴素:将带上标签数据(点),通过投影(变换)的方法,投影更低维的空间。在这个低维空间中,同类样本尽可能接近,异类样本尽可能远离。
我们从最简单的二分类问题入手。假设原始样本的特征维数只有二维( x1,x2 x 1 , x 2 ),现在我们希望将二维特征用一维表示,也就是将二维平面上的点投影到一条直线上,如下图所示:
从上图可以看出,右边直线在数据降维后的效果要比左边直线更优,因为它更加满足降维后的同类数据尽可能接近,异类数据尽可能远离的目标。LDA算法的目标就是找到这么一条直线。
我们知道矩阵的本质是一个线性映射。因此对于二分类问题,原始二维平面点经过映射后的可以表示成:
其中 w w 为投影矩阵,当投影到一维直线时,这个矩阵退化为一个列向量; y y 表示 x x 投影到直线后的点到原点的距离。
欲使同类样本的投影点尽可能接近,可以让同类样本的投影点的协方差尽可能小;而欲使异类样本的投影点尽可能远离,可以让异类样本的类中心之间的距离尽可能大。令 μi μ i 和 ∑i ∑ i 分别表示第 i∈{0,1} i ∈ { 0 , 1 } 原始样本的均值向量和协方差矩阵。
投影后的类中心可以表示为:
投影后的协方差可以表示为:
因此欲达到上述目的,等价于最大化目标
定义“类内散度矩阵”
定义“类间散度矩阵”
则上面的目标函数可以重写为
因为分子分母都是关于 w w 的二次型,若 w w 是一个解,则对任意常数 α α , αw α w 也是一个解。因此解与 w w 的长度无关,只与其方向有关。不妨令 wTSww=1 w T S w w = 1 ,则最优化目标等价于
引入拉格朗日乘子,上式等价于
求导得
令其等于0,得
如果 Sw S w 可逆,等式两边同乘 S−1w S w − 1 有
可喜的发现 w w 就是矩阵 S−1wSb S w − 1 S b 的特征向量,因此求解问题转化成求矩阵特征值问题上了,首先求出 S−1wSb S w − 1 S b 的特征值,然后取前K个特征向量按列组成 w w 矩阵即可。
可以将二分类任务推广到多分类任务中,这时不再是将样本点投影到一条直线上,而是投影到一个 d d 维超平面上。此时的基向量 (w1,w2,...,wd) ( w 1 , w 2 , . . . , w d ) 按列构成了投影矩阵。假定存在C个类别,且第 i i 类样本数为 mi m i ,前面二分类问题中定义的“类间散度矩阵”需要重新定义为每类样本中心相对于全局样本中心点的散列情况。
所以 Sb S b 表示如下:
“类内散度矩阵”的定义不变
所以优化目标同样可以写成
由于现在分子分母都是矩阵,要将矩阵变成实数,可以取矩阵的行列式或者矩阵的迹。其中,矩阵的行列式等于矩阵特征值之积,矩阵的迹等于矩阵特征值之和。所以优化目标可以转化为:
可以通过如下广义特征值求解:
W的解则是 S−1wSb S w − 1 S b 的N-1个最大广义特征值所对应的特征向量按列组成的矩阵。
总结LDA算法流程如下:
输入:样本数据集D= {xi,yi}mi=1 { x i , y i } i = 1 m , yi∈{C1,C2,...,CK} y i ∈ { C 1 , C 2 , . . . , C K } 。降维到的维数 d d 。
输出:降维后的样本数据
主成分分析(PCA)是另一种常用的数据降维方法,它属于无监督学习算法,即在算法训练时,我们不需要知道样本对应的类别。
同样的,我们从将二维数据降维到一维入手。假设现在我们有五条样本数据如下(已经过均值化为0处理):
将这五个点表示在二维坐标系下如图所示:
现在我们想将这五个点投影到一条直线上,可以看到无论是选择 x x 轴还是 y y 轴,都存在部分点投影后重合的情况,这不是我们想要的结果,因为这相当于损失了部分数据点的信息;如果选择过原点的一三象限对角线,投影后的五个点将不再会重合,这是我们想要的结果。总结来说,我们希望样本点在每一维上的投影点尽可能分散。这种分散程度可以用方差来度量。
现在考虑多维情形,首先我们选择投影后方差最大的方向为第一个方向,接下来要进行其他方向的选择,显然不能继续选取方差最大的方向,因为这样选择的方向必将几乎和第一个方向重合。想想降维的目标:在信息不丢失的情况下,尽可能去除一些存在相关性的字段,方差最大已经保证了尽可能保留原始信息,那怎样才能去除存在相关性的字段呢?反过来就是,我们希望降维后的各字段都不存在相关性,而协方差正是用来度量两个随机变量相关性的参数,协方差为0的两个随机变量称为不相关。
至此我们得到了PCA的目标:将一组 n n 维向量降为 k k 维( 0<k<n 0 < k < n ),其目标是选择 k k 个单位正交基,使得原始数据在变换到这组基上后,各字段两两协方差为0,而各字段的方差尽可能大。
那怎么用数学方法来表示我们的优化目标呢?设我们有 m m 个 n n 维样本数据(已经过均值化为0处理),将其按列排成 n∗m n ∗ m 的矩阵 X X
设 C=1mXXT C = 1 m X X T
可以发现C是一个对称矩阵,其对角线上的元素就是各字段的方差,第 i i 行 j j 列的元素和第 j j 行 i i 列的元素相同,表示 i i 和 j j 两个字段的协方差。现在我们可喜的发现,需要优化的目标已经统一到一个矩阵中,这个矩阵称为协方差矩阵。因此我们希望降维后的数据点的协方差矩阵是对角矩阵并取前 k k 大的。
设原始样本数据形成的矩阵为 X X
则原始样本数据形成的协矩阵为 C=1mXXT C = 1 m X X T
设 W W 是一组正交基 (w1,w2,...,wk) ( w 1 , w 2 , . . . , w k ) 按列形成的矩阵
则降维后的数据点形成的矩阵为 Y=WTX Y = W T X
则降维后的数据点形成的协矩阵为
因此,优化目标变为寻找一个矩阵 W W ,满足 WTCW W T C W 是对角矩阵。
由上文知,原始数据矩阵的协方差矩阵 C C 是一个对称矩阵,因此具有如下两条性质:
因此一个 n n 行 n n 列的实对称矩阵一定可以找到 n n 个单位正交特征向量,设这n个特征向量为 e1,22,...,en e 1 , 2 2 , . . . , e n ,将其按列组成矩阵:
所以我们要找的 W W 就是原始数据矩阵的协方差矩阵 C C 的前 K K 大的特征值对应的特征向量按列组成的矩阵。
PCA算法步骤总结如下:
线性判别分析(Linear Discriminant Analysis)
线性判别分析LDA原理总结
PCA的数学原理