PCA,SVD,LDA,MDS求解近似矩阵,都涉及特征值,特征向量求解,矩阵相似变换。
LDA是与PCA非常相关的一种算法,PCA是将变量投影到方差最大的基向量上,而LDA则加入了类别标签,投影后希望组内尽可能近,组间尽可能远,因而LDA属于监督学习的一种降维算法。
推导过程:假设找到最佳的一个投影基向量
![]()
(列向量),那原始数据
![]()
在
![]()
上的投影可以表示为
![]()
。设类标签为
![]()
,
均值向量为
![]()
,方差为
投影之后的均值向量为
首先考虑二分类情况
假如只有两个类别,什么是最佳的
![]()
呢?首先发现,能够使投影后的两类样本中心点尽量分离的直线是好的直线,定量表示就是:
然后可用
![]()
作为目标函数。
但是只考虑
![]()
是不行的,因为投影到基向量上,虽然可能获得最大的中心点间距,但类别之间可能发生重叠,如下图:
因而还需要考虑同类样本点之间的方差,同类样本点之间方差越小, 就越难以分离。故而引入另一个度量值,散列值
![]()
即投影后的组内方差。因想要的投影后不同类别的样本点越分开越好,同类的越聚集越好,也就是均值差越大越好,散列值越小越好。故目标函数可以变为
![]()
,寻找
![]()
使该函数最大化;
展开散列公式,
故分母
![]()
可简化成
![]()
; 其中
![]()
定义为类内散度矩阵
分子
![]()
;
![]()
为类间散度矩阵;
因而目标函数
在我们求导之前,需要对分母进行归一化,因为不做归一的话,
![]()
扩大任何倍,都成立,我们就无法确定
![]()
。因此我们打算令
![]()
,即引入新的约束条件,那么加入拉格朗日乘子后进行求导。
引入拉格朗日乘子: 目标函数等价于
如果
![]()
可逆,则
![]()
即可知
![]()
为
![]()
的特征向量。
注意到
![]()
,两个类别下, 因
![]()
为常数,不妨令
![]()
;带入上式求得
![]()
;由于对
![]()
扩大缩小任何倍不影响结果,因此可以约去两边的未知常数
![]()
,得到
![]()
也就是说我们只要求出原始二类样本的均值和方差就可以确定最佳的投影方向了。
多类别情况
假设有C个类别,需要K维向量(或者叫做基向量)来做投影。
同理,K维基向量作为行向量组成的矩阵 即
![]()
可以用来进行投影变换, 即
同样从类内散度矩阵和类间散度矩阵来考虑,
类内散度矩阵不变:
![]()
仍可以理解为类内部样本点的方差。
类间散度矩阵:二分类的时候,度量的是两类样本点的距离`
![]()
;多类的时候,度量的是每类均值点相对于样本中心的散列情况,
即
![]()
此处引入
![]()
,是考虑到某类样本点较多,则可赋予更多的权重,理应用
![]()
表示,但由于J(w)对倍数不敏感,因此使用
![]()
;其中
投影后的变换:
故最终
同样引入拉格朗日乘子,限定
![]()
为1;求得
![]()
即可知
![]()
为
![]()
的特征向量;取前K个特征向量组成W矩阵即可;
由于
![]()
中
![]()
秩为1,因此
![]()
的秩至多为C(矩阵的秩小于等于各个相加矩阵的秩的和)。由于知道了前C-1个
![]()
后,最后一个
![]()
可以有前面的
![]()
来线性表示,因此
![]()
的秩至多为C-1。那么K最大为C-1,即特征向量最多有C-1个。特征值大的对应的特征向量分割性能最好。
由于
![]()
不一定是对称阵,因此得到的K个特征向量不一定正交,这也是与PCA不同的地方。
---
MDS (多维尺度变换)
将高维坐标中的点投影到低维空间中,保持点彼此之间的相似性尽可能不变。相似性用距离来表示。其中采用欧式距离的称为Classical MDS(经典多维尺度变换),否则为No-classical MDS(非经典多维度尺度变换)
推导:
假设有
![]()
个样本,其样本空间如下:
![]()
,令
![]()
表示样本间的距离,其中第
![]()
行
![]()
列的元素
![]()
表示样本
![]()
与样本
![]()
之间的距离。在不改变样本间距离的情况下,实现数据降维,最终要得到新的样本空间
![]()
; 此时要满足
![]()
条件;
由
![]()
可以联想到内积矩阵,因而令
![]()
;,保持维度仍为
![]()
,故
![]()
;
在Z维空间中空间中,点可以进行平移与旋转,因此在Z维空间中会有多种分布满足要求,不失一般性,假设Z维空间中的实例点是中心化的,
![]()
;即B的行和列之和均为0,
![]()
; 进一步能得到
此时,行均值
列均值
均值
最终得到:
因而此时能求出内积矩阵B; 因为
![]()
,为对称阵,故存在正交矩阵
![]()
,使得
![]()
因而得出
![]()
, 因为
![]()
,为了有效降维,此时可取
![]()
个特征值,以及对应的特征向量来近似。