一.判别分析降维
LDA降维和PCA的不同是LDA是有监督的降维,其原理是将特征映射到低维上,原始数据的类别也能清晰的反应在低维的数据上,也就是低维的数据也可以用来判别分类。
我们先看看二维的情况,我们希望找到一个向量,使得数据点映射到这个向量上后,两个类间的距离尽可能,两个类内的样本的距离尽可能小。这样就得到了一个目标函数,分子是投影后两个类间均值的差的平方,我们希望这个值尽可能大,分母是投影后的类的散列值的和,是少除以样本数量的方差,进一步化简分子得到投影向量的转置乘以投影前的类均值差向量的外积再乘以投影向量,分母是投影向量的转置乘以投影前的类间散列矩阵的和再乘以投影向量,此时我们需要求使得目标函数最小的投影向量,由于投影向量扩大或缩小多少倍,目标函数值不变,那么我们可以让分母的模长为1,此时可以使用拉格朗日乘子法,最后求得:当类间散列矩阵的和存在逆矩阵时,投影向量就是类间散列矩阵的和的逆矩阵和投影前的类均值差向量的外积的特征向量。进一步的,我们化简等式左边得到类间散列矩阵的逆矩阵乘以投影前类间均值向量的差乘以一个常数,那么由于投影向量可以放缩常数倍不影响结果,我们约掉两边的常数,得到投影向量等于投影前类均值向量的差左乘散列矩阵的逆矩阵,这就是fisher提出的判别分析
二.PCA降维
1.PCA的步骤:
PCA是将原始样本投影到低维的空间上,使得样本的绝大部分信息得以保留,并且特征的维度降低使得模型不易过拟合。思想是:对于原始空间中的m维向量而言,找到k个投影向量使得这m维向量投影到这k个投影向量上的方差最大,保留原始的样本信息最多,我们首先可以看看找第一个向量,使得在这个方向上的投影方差最大。步骤如下:
1.在投影之前,我们对数据做中心化处理,使得原始数据均值为0
2.计算中心化后的样本的协方差矩阵,这是个m*m维的矩阵,m表示原始特征的数目。第i行第j列的元素表示数据中第i列和第j列的协方差
3.计算协方差矩阵的特征值和特征向量,特征向量是单位向量,模长为1,
4.选择带有最大特征值的k个特征向量
5.计算k个最大特征值对应的k个特征,对于每一个特征,都是用原数据矩阵(n行m列)乘以对应的特征向量(m行1列,m是原始变量的数目):因此最后的特征有n行一列,表示每个样本一个特征值
2. PCA的过程
对数据进行中心化和归一化,然后将其投影到某个向量上,计算这一维上的数据点的方差,经过化简就是投影向量的转置乘以原始数据的协方差矩阵再乘以投影向量,前提是这个投影向量是单位向量,然后我们令这个方差λ最大,得到最大方差时对应的那个投影向量就是第一个主成分,那么这个向量如何求解呢?因为这个投影向量是单位向量,那么等式两边左乘以投影向量,得到了λu=Σu,则说明这个投影向量u的方向其实就是这个协方差矩阵的特征向量,那么最大方差λ对应的就是Σ的最大特征值对应的特征向量的方向,就是第一主成分的方向,第二大特征值对应的特征向量就是第二主成分的方向
数据的中心化并不是必要的,但是却方便了表示和计算,PCA是计算样本协方差矩阵的,因此中心化或者中心化并不改变特征向量的方向或者特征值的大小,因此即使不中心化,PCA一样的起作用,然而如果你中心化数据了,那么样本的协方差矩阵的数学表示就会得以简化,如果你的数据点就是你的数据矩阵的列,那么协方差矩阵就表示为xx',多么简便啊!技术上,PCA是包括数据中心化这一步的,但是那只是为了计算协方差矩阵,然后对协方差矩阵做特征值分解,得到各个特征值和特征向量
数据的归一化也不是必须的,如果某些变量有很大或者很小的方差,那么PCA将会倾向于这些大的方差的变量,例如如果你增加了一个变量的方差,也许这个变量对第一个主成分会从很小的影响到起主导性的作用,因此如果你想要PCA独立于这样的变化,归一化可以做到,当然,如果你的变量在那个规模上很重要,那么你可以不归一化,归一化在PCA中是很重要的,因为PCA是一个方差最大化的实验,它就是投影你的原始数据到方差最大化的方向上
3.PCA的特点
(1)如果原始的特征是高度相关的,PCA的结果是不稳定的;
(2)新的特征是原始特征的线性组合,所以缺乏解释性。
(3)原始数据不一定要是多元高斯分布的,除非你使用这个技术来预测性的建模去计算置信区间
三.奇异值分解
1.线性变换
矩阵乘法的作用是线性变换,对一个向量乘以一个矩阵,可以使得这个向量发生伸缩、切变和旋转。我们都知道对称矩阵的特征向量是相互正交的,给定一个对称矩阵M,可以找到一些这样的正交向量v,使得Mv=λv,即这个矩阵M对向量做了拉伸变换,λ是拉伸的倍数。那么对于普通的矩阵呢,才能让一个原来就是相互垂直的网格平面(orthogonal grid), 线性变换成另外一个网格平面同样垂直呢?
对于一个正交矩阵,其对应的变换叫做正交变换,这个变换的作用是不改变向量的尺寸和向量间的夹角。正交变换中的旋转变换只是将变换向量用另一组正交基表示,在这个过程中并没有对向量做拉伸,也不改变向量的空间位置,只是将原坐标系旋转得到新的坐标系,那么这个旋转矩阵怎么求呢?对于二维空间中的某个向量而言,其经过旋转变换的结果就是从用一组坐标系表示到用另外一组坐标系表示,新的坐标系下的坐标各个分量相当于是原坐标系下的坐标的各个分量在新的坐标系的两个正交基下的投影,或者是相当于将原来的二维向量经过旋转到了新的坐标,因此相当于对向量左乘一个旋转矩阵,求出这个矩阵就是旋转变换的矩阵。刚刚说正交变换不改变向量的空间位置是绝对的,但是坐标是相对的,从原来的坐标系的基向量位置看这个二维向量,到从新的坐标系下看这个向量的坐标是变化的
2.特征值分解
矩阵乘以一个向量的结果仍是同维数的一个向量。因此,矩阵乘法对应了一个变换,把一个向量变成同维数的另一个向量。
对特定的向量,经过一种方阵变换,经过该变换后,向量的方向不变(或只是反向),而只是进行伸缩变化(伸缩值可以是负值,相当于向量的方向反向)?这就是相当于特征向量的定义
特征向量的几何含义是:特征向量通过方阵A变换只进行伸缩,而保持特征向量的方向不变。特征值表示的是这个特征到底有多重要,类似于权重,而特征向量在几何上就是一个点,从原点到该点的方向表示向量的方向。
一个变换(或者说矩阵)的特征向量就是这样一种向量,它经过这种特定的变换后保持方向不变,只是进行长度上的伸缩而已。特征值分解则是对旋转和缩放两种效应的归并。因为特征值分解中的A为方阵,显然是不存在投影效应的。或者说,我们找到了一组基(特征向量们),在这组基下,矩阵的作用效果仅仅是缩放。即矩阵A将一个向量从x这组基的空间旋转到x这组基的空间上,并在每个方向进行了缩放,由于前后两组基都是x,即没有进行旋转和投影。
详细分析特征值分解的过程:首先由于特征向量是正交的,特征向量组成的矩阵是正交方阵,两边同时右乘以这个方阵的逆矩阵,可以得到矩阵A的表达式为A=UΛU',两边同时右乘一个向量,相当于对这个向量左乘矩阵A,对向量做旋转或拉伸的变换。这个变换的过程分为三个映射:第一个是将向量x进行了旋转,它将x用新的坐标系来表示;第二个变换是拉伸变化,对x的每一维分量都进行了特征值大小的拉伸或缩小变换;第三个是对x做第一个变换的逆变换,因为是第一个矩阵的逆矩阵,也是旋转变换。在第二个拉伸变换中,可以看出,如果矩阵A不是满秩的,即有的特征值为0,那么这里相当于将x映射到了m维空间的子空间(m是矩阵A的维数m*m),此时矩阵A是一个正交投影矩阵,它将m维向量x映射到了它的列空间。如果A是二维的,那么可以在二维平面上可以找到一个矩形,使得这个矩形经过A变换后还是矩形
3.奇异值分解
在特征值分解中,矩阵A要求是方阵,那么对于一个任意的矩阵m*n,能否找到一组正交基使得经过它变换后还是正交基?这就是SVD的精髓所在
A=UΣU',我们来分析矩阵A的作用:首先是旋转,U的列向量是一组标准正交基,V也是,这表示我们找到了两组基。A的作用是将一个向量从V这组正交基向量空间旋转到U这组正交基向量空间;其次是缩放,当V对向量x做了旋转以后,相当于把向量x旋转使其用V这组正交基表示坐标,然后Σ对向量x的每个分量做了缩放,缩放的程度就是Σ的主对角线上的元素,是奇异值;最后是投影,如果U的维数小于V的维数,那么这个过程还包含了投影
1.理论层面
现在的目的是找一组正交基,使得经过A矩阵变换后仍然是一组正交基,假设已经找到这样一组正交基,那么对这组正交基经过A变换,如何使其仍然是一组正交基呢?只要使得原来的正交基是A'A的特征向量即可,|AVi|就是A'A的特征值的开方,也就是奇异值,然后我们求AVi的单位向量Ui,这些Ui也都是正交的,那么我们就找到了两组正交基使得从V这组正交基变换到U这组正交基,V称作右奇异向量,U称作左奇异向量,AVi的模是奇异值,我们对V1,...,Vk进行扩充Vk+1,..,Vn(Vk+1,..,Vn是Ax=0的零空间)使得V1,...,Vn是n维空间中的一组正交基,对U1,...,Uk进行扩充Uk+1,...,Um,使得U1,..,Um是m维空间中的一组正交基,这个k值是矩阵A的秩,当A是满秩时,分解后的矩阵相乘等于A,k越接近于n,则分解后的矩阵相乘结果越接近于A
对矩阵A的映射过程分析:如果在n维空间中找到一个超矩形,使其都落在A'A的特征向量的方向上,那么经过A变换后的形状仍为超矩形。Vi是A'A的特征向量,Ui是AA'的特征向量,也是AVi的单位向量,σ是A'A的特征值的开方,根据这个公式可以计算出矩阵A的奇异值分解矩阵
2.几何层面
SVD是将一个相互垂直的网格变换到另外一个相互垂直的网格,按照上面的对于U,V的定位,可以实现用矩阵A将一个向量变换的过程,首先将向量x写成用V这组正交基表示的形式,然后用矩阵A左乘向量x,并带入AVi=σiUi,最后可以得到A的分解式,不是矩阵分解式,而是向量分解式,可以看出,如果有的奇异值很小甚至为0,那么本来有n项相加,就最后只有奇异值不为0的项相加了,假如有k项相加,那么k越接近于n最后A分解的结果越接近于A
3.奇异值分解的应用
(1)可以用来减少元素的存储
(2)可以用来降噪:去掉奇异值小的项,奇异值小的我们认为是含有样本重要信息很少,都是噪声,因此就把这些信息少的给去掉了
(3)数据分析:比如说我们有一些样本点用于建模,我们通过SVD将数据里面的奇异值小的都去掉了,最后得到了分解后的数据,用来做分析,更加准确
4.SVD和PCA的联系
(1)列降维
我们知道PCA里面,我们对变量进行降维实际上就相当于对数据矩阵Am*n右乘一个矩阵Pn*r,就得到了Am*r,表示每个样本的特征向量只有r维的,和这个矩阵P代表了r个列向量是数据矩阵A的协方差矩阵n*n的最大的r的特征值对应r个特征向量,都是n维的。和SVD相比,将SVD的表达式两边同时右乘一个Vn*r,这样等式右边就Vr*n和Vn*r相乘是单位向量,因为Vn*r是A'A的r个特征向量,是前r个不为0的特征值对应的特征向量,且由于A'A是对称的,那么各个特征向量之间是正交的,这样就得到了刚刚PCA推导出来的公式
(2)行降维
同理,对数据矩阵Am*n左乘一个矩阵Pr*m,就得到了Ar*n,表示每个特征对应的样本只有r个,矩阵P代表了r个m维向量,每个向量是让每个特征对应的样本向量所要投影的方向向量。和SVD相比,将SVD两边同时左乘以一个矩阵Ur*m,就得到了Ar*n,即在行方向上进行了降维,等式右边是Ur*m和Um*r相乘为单位向量,因为Um*r是AA'的特征向量,是AA'的前r个不为0的特征值对应的特征向量,是m维的,由于AA'是对称矩阵,那么各个特征向量之间是正交的,这样就得到了刚刚PCA推导出来的公式
可以看出:
--PCA几乎可以说是对SVD的一个包装,如果我们实现了SVD,那也就实现了PCA了
--而且更好的地方是,有了SVD,我们就可以得到两个方向的PCA,如果我们对A’A进行特征值的分解,只能得到一个方向的PCA。