简述多种降维算法
LDA:
LDA的全称是Linear Discriminant Analysis(线性判别分析),是一种supervised learning。有些资料上也称为是Fisher’s Linear Discriminant。 LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近。要说明白LDA,首先得弄明白线性分类器:因为LDA是一种线性分类器。对于K-分类的一个分类问题,会有K个线性函数:
当满足条件:对于所有的j,都有$Y_k > Y_j$的时候,我们就说x属于类别k。对于每一个分类,都有一个公式去算一个分值,在所有的公式得到的分值中,找一个最大的,就是所属的分类了。
上式实际上就是一种投影,是将一个高维的点投影到一条高维的直线上,LDA所求的目标是,给出一个标注了类别的数据集,投影到了一条直线之后,能够使得点尽量的按类别区分开,当k=2即二分类问题的时候,如下图所示:
红色的方形的点为0类的原始点、蓝色的方形点为1类的原始点,经过原点的那条线就是投影的直线,从图上可以清楚的看到,红色的点和蓝色的点被原点明显的分开了,这个数据只是随便画的,如果在高维的情况下,看起来会更好一点。下面我来推导一下二分类LDA问题的公式:
假设用来区分二分类的直线(投影函数)为:
LDA分类的一个目标是使得不同类别之间的距离越远越好,同一类别之中的距离越近越好,所以我们需要定义几个关键的值。
类别i的原始中心点为:($D_i$表示属于类别i的点)
类别i投影后的中心点为:
衡量类别i投影后,同一类中类别点之间的分散程度(方差)为:
最终我们可以得到一个下面的公式,表示LDA投影到w后的目标函数(求最大值):
我们分类的目标是,使得类别内的点距离越近越好(集中),类别间的点越远越好。分母表示每一个类别内的方差之和,方差越大表示一个类别内的点越分散,分子为两个类别各自的中心点的距离的平方,我们最大化J(w)就可以求出最优的w了。想要求出最优的w,可以使用拉格朗日乘子法,但是现在我们得到的J(w)里面,w是不能被单独提出来的,我们就得想办法将w单独提出来。
我们定义一个投影前的各类别分散程度的矩阵,这个矩阵看起来有一点麻烦,其实意思是,如果某一个分类的输入点集Di里面的点距离这个分类的中心点mi越近,则Si里面元素的值就越小,如果分类的点都紧紧地围绕着mi,则Si里面的元素值越更接近0.
带入Si,将J(w)分母化为:
同样的将J(w)分子化为:
这样损失函数可以化成下面的形式:
这样就可以用最喜欢的拉格朗日乘子法了,但是还有一个问题,如果分子、分母是都可以取任意值的,那就会使得有无穷解,我们将分母限制为长度为1(这是用拉格朗日乘子法一个很重要的技巧,在下面将说的PCA里面也会用到,如果忘记了,请复习一下高数),并作为拉格朗日乘子法的限制条件,带入得到:
这样的式子就是一个求特征向量的问题了。
对于N(N>2)分类的问题,我就直接写出下面的结论了:
这同样是一个求特征值的问题,我们求出的第i大的特征向量,就是对应的Wi了。
参考: http://www.cnblogs.com/jerrylead/archive/2011/04/21/2024384.html
PCA:
主成分分析(PCA)与LDA有着非常近似的意思,LDA的输入数据是带标签的,而PCA的输入数据是不带标签的,所以PCA是一种unsupervised learning。LDA通常来说是作为一个独立的算法存在,给定了训练数据后,将会得到一系列的判别函数(discriminate function),之后对于新的输入,就可以进行预测了。而PCA更像是一个预处理的方法,它可以将原本的数据降低维度,而使得降低了维度的数据之间的方差最大(也可以说投影误差最小,具体在之后的推导里面会谈到)。PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征
求解k个k维正交特征,即求解$S = \frac{1}{N}\sum_{n = 1}^{N}(x_n - \bar{x})^2$的特征向量
提取N个主成分的伪代码:
减去平均值(使得均值为0) 计算协方差矩阵即下面中的S 计算协方差矩阵的特征值和特征向量 将特征值从大到小排序 保留最大的K个特征值以及它们的特征向量 将数据映射到上述K个特征向量构造的新空间中
最大化方差法:
在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。
假设我们还是将一个n维空间中的点投影到一个k维特征空间去。首先,给出原空间的中心点:
假设u1为k维特征空间特征向量,投影之后的方差为:
上面这个式子如果看懂了之前推导LDA的过程,应该比较容易理解,如果线性代数里面的内容忘记了,可以再温习一下,优化上式等号右边的内容,还是用拉格朗日乘子法:
将上式求导,使之为0,得到:
这是一个标准的特征值表达式了,λ对应的特征值,u对应的特征向量。上式的左边取得最大值的条件就是λ1最大,也就是取得最大的特征值的时候。假设我们是要将一个D维的数据空间投影到M维的数据空间中(M < D), 那我们取前M个特征向量构成的投影矩阵就是能够使得方差最大的矩阵了。
奇异值分解(SVD):
对任意M*N的矩阵,能否找到一组正交基使得经过它变换后还是正交基?答案是肯定的,它就是SVD分解的精髓所在。
现在假设存在M*N矩阵A,事实上,A矩阵将n维空间中的向量映射到k(k<=m)维空间中,k=Rank(A)。现在的目标就是:在n维空间中找一组正交基,使得经过A变换后还是正交的。假设已经找到这样一组正交基:
则A矩阵将这组基映射为:
如果要使他们两两正交,即
根据假设,存在
所以如果正交基v选择为A'A的特征向量的话,由于A'A是对称阵,v之间两两正交,那么(特征向量的定义)【$v_i$是n*1维向量】
这样就找到了正交基使其映射后还是正交基了,现在,将映射后的正交基单位化:
因为
所以有
所以取单位向量(映射后的单位正交基)【$u_i$是m*1维向量】
由此可得
当k < i <= m时,对u1,u2,...,uk进行扩展u(k+1),...,um,使得u1,u2,...,um为m维空间中的一组正交基,即
同样的,对v1,v2,...,vk进行扩展v(k+1),...,vn(这n-k个向量存在于A的零空间中,即Ax=0的解空间的基),使得v1,v2,...,vn为n维空间中的一组正交基,即
则可得到
继而可以得到A矩阵的奇异值分解:
http://chenrudan.github.io/blog/2016/04/01/dimensionalityreduction.html
http://blog.codinglabs.org/articles/pca-tutorial.html
http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html
http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html
http://blog.csdn.net/zhongkejingwang/article/details/43053513