本文主要的目的在于讨论PAC降维和SVD特征提取原理,围绕这一主题,在文章的开头从涉及的相关矩阵原理切入,逐步深刻讨论,但愿可以学习这一领域问题的读者朋友有帮助。html
这里推荐Mit的Gilbert Strang教授的线性代数课程,讲的很是好,循循善诱,深刻浅出。算法
Relevant Link: 数组
Gilbert Strang教授的MIT公开课:数据分析、信号处理和机器学习中的矩阵方法 https://mp.weixin.qq.com/s/gi0RppHB4UFo4Vh2Neonfw
对于数域K上的矩阵A,若是存在数域K上的矩阵B,使得:机器学习
则称A是可逆矩阵(或非奇异矩阵)。svg
若是A是可逆矩阵,则适合上式的矩阵B称为A的逆矩阵,记做函数
若是A是可逆矩阵,则它又逆矩阵使得:性能
从上式可看出,也是可逆矩阵,而且:学习
从矩阵可逆的公式能够看出,A与B可交换,所以可逆矩阵必定都是方阵。优化
利用反证法,假如还有矩阵B1也适合上式,则:编码
所以,B1 = B。
而且:
若是A可逆,则A'也可逆,而且:
数据K上n级矩阵A可逆的充分必要条件是: 。
值得注意的是,也是矩阵对应线性方程组有解的充要条件。
n级矩阵A可逆的充分必要条件是 rank(A) = n,即A为满秩矩阵。
数据K上n级矩阵A可逆的充分必要条件是A的行(列)向量组线性无关。
充分性:设A能够表示成一些初等矩阵的乘积,因为初等矩阵均可逆,由于他们的乘积A也可逆。
必要性:设A可逆,则A通过初等行变换化成的简化行阶梯矩阵必定是单位矩阵I,所以有初等矩阵,使得
所以
因为初等矩阵的逆矩阵还是初等矩阵,所以上式代表:矩阵A能够表示为一些初等矩阵的乘积。
当矩阵A可逆时,
上式给出了求逆矩阵的一种方法,称之为伴随矩阵法。
有的时候,当矩阵的阶数比较高的时候,使用其行列式的值和伴随矩阵求解其逆矩阵会产生较大的计算量。这时,咱们能够采用初等变换法进行逆矩阵求解。
设A是n级可逆矩阵,根据可逆矩阵性质,咱们知道,有初等矩阵,使得:
因此又有:
从上式能够看出,若是有一系列初等行变换把A化成了单位矩阵I,那么一样的这些初等行变换就把I化成了。
所以咱们能够把A与I并排放在一块儿,组成一个nx2n级矩阵(A,I),对(A,I)做一系列初等行变换,把它的左半部分化成I,这时的右半部分就是,即:
这种求逆矩阵的方法称为初等变换法,这时最经常使用的方法。
在线性回归模型中,根据最小二乘求解公式,咱们有:
在满秩状况下(知足数据点个数>特征数量),系数求解等价于存在一个简单的闭式矩阵解,使得最小二乘最小化。由下式给出:
其中,是矩阵
的逆矩阵,令
,则最终学得的多元线性回归模型为:
能够看到,参数求解的本质就是矩阵乘法,矩阵求逆等操做。
固然,须要指出的是,对于linear regression model来讲,一样可使用GD梯度降低的方式进行参数求解,感兴趣的读者朋友能够下载sklearn的内核源代码进行一对一的分析,能够得到更直观的体验。
Relevant Link:
https://www.cnblogs.com/LittleHann/p/10498579.html#_label3_1_2_1 https://wenku.baidu.com/view/1963472d9a6648d7c1c708a1284ac850ad0204ad.html
在平面上取一个直角坐标系Oxy,设向量a,β的坐标分别是(a1,a2),(b1,b2)。若是a,β都是单位向量,而且互相垂直,则他们的坐标知足:
上述4个等式能够写成一个矩阵形式:
设矩阵A的第1,2行分别是a,β的坐标,则上面矩阵形式能够重写为:
咱们把知足这种特性的矩阵A称为正交矩阵。
通常的,若是是实数域上的方阵A知足:,则称A是正交矩阵。
若A,B都是正交矩阵,则有下式:
所以AB也是正交矩阵。
若A是正交矩阵,则,从而
,由于转置不概念行列式,即
因此,|A| = 1,或者 -1。
该定理告诉咱们,构建正交矩阵等价于求标准正交基,许多实际问题须要构造正交矩阵,因而咱们要设法求标准正交基。
设实数域上n级矩阵A的行向量组为,列向量组为
,则:
(1)A为正交矩阵当且仅当A的行向量知足下式:
(2)A为正交矩阵当且仅当A的列向量组知足下式:
咱们引用一个符号,它的含义是:
称为Kronecker(克罗内克)记号,采用这个符号,上面两式能够分别写成:
从上式能够看到,从行向量和列向量的角度,正交矩阵都知足上面的定理。
这两组式子的左端都是两个n元有序数组的对应元素的乘积之和。与几何空间中两个向量的内积在直角坐标系中的计算公式类似。所以,咱们能够在实数域上的n维向量空间也引入内积的概念。
在中,任给两个向量组
,规定
这个二元实值函数(a,β)称为的一个内积,一般称这个内积为
的标准内积。
上式也能够简写为:
对一切,有下列几个性质
n维向量空间有了标准内积后,就称
为一个欧几里得空间。
在欧几里得空间中,向量a的长度 |a| 规定为:
长度为1的向量称为单位向量,a是单位向量的充要条件是
由于,因而对于
,
必定是单位向量。
把非零向量 a 乘以,称为把a单位化。
在欧几里得空间中,若是
,则称a与β是正交的,记做
在欧几里得空间中,由非零向量组成的向量组若是其中每两个不一样的向量都彼此正交,则称它们是正交向量组。
特别的,仅由一个非零向量组成的向量组也是正交向量组。
同时,若是正交向量组的每一个向量都是单位向量,则称它为正交单位向量组。
欧几里得空间中,正交向量组必定是线性无关的。
证实:
设是正交向量组,设
把上式两端的向量都与做内积,得:
因为,当 j != i 时,所以上式得:
因为,所以
,从而得:
根据线性相关基本定理,线性无关。
欧几里得空间中,n个向量组成的正交向量组必定是
的一个基,称它为正交基。n个单位向量组成的正交向量组称为
的一个标准正交基。
Relevant Link:
https://baike.baidu.com/item/%E6%96%BD%E5%AF%86%E7%89%B9%E6%AD%A3%E4%BA%A4%E5%8C%96/756386?fr=aladdin 《建明线性代数》丘维声
若是矩阵A能够通过一系列初等行变换与初等列变换变成矩阵B,则称A与B是相抵的(或等价),记做
因为矩阵的初等行(列)变换能够经过初等矩阵与矩阵的乘法来实现,而且一个矩阵可逆的充要条件是它能表示成一些初等矩阵的乘积,所以:
s x n 矩阵A与B相抵,等价于:
→ A通过初等行变换和初等列变换变成B;
→ 存在s级初等矩阵与n级初等矩阵
,使得:
;
→ 存在s级可逆矩阵P与n级可逆矩阵Q,使得:
s x n 矩阵之间的相抵关系具备下述性质
设A与B都是数域K上n级矩阵(注意,必须是n级方阵才存在类似矩阵),若是存在数域K上的一个n级可逆矩阵U,使得
,
则称A与B是类似的,或说B是A的类似矩阵,记做。
数域K上n级矩阵之间的类似关系具备下列性质:
而且当它们可逆时,它们的逆矩阵也类似
n级矩阵A的主对角线上元素的和称为A的迹,记做tr(A)
先抛出结论:同一个线性变换,不一样基下的矩阵,称为类似矩阵。
这个结论不容易简单阐述清楚,咱们先从一些简单的概念开始,逐步切入概念。上面说到不一样基下的矩阵,那什么是不一样向量基呢?即什么是向量基变换呢?
咱们经过一个简单的例子来直观地说明什么是坐标(向量基)变换。
坐标转换是数学中的经常使用手段,目的是简化运算,提升可视化理解程度。好比常见的,把直角坐标系(坐标系)的圆方程,换元为极坐标(
坐标系):
下图展现了换元先后的函数形式:
从直观上看,换元后的代数式和图像都变简单了。从线性方程角度,换元将原方程从非线性空间转换到了线性空间。
线性函数能够认为是把
点映射到
点,咱们称为线性变换
,记做:
该线性变换矩阵的形式以下:
进一步推广开来,只要替换为平面内全部的点
,咱们就能够对整个平面作变换,该线性变换记做:
进而能够写做矩阵的形式:
咱们记:
咱们能够获得更简便的记法:
下图用淡蓝色网格来表示这个线性变换(这个变换实际上镜面反转):
上面的讨论中,可能读者朋友以为很是天然,这是由于咱们在高中、大学的学习中,对直角坐标系已经很是熟悉了,头脑中也已经创建了很是直观感性的空间想象能力。
其实在前面的讨论中隐含了一个特征重要的信息,就是坐标系(向量基)。
是基于直角坐标系的(标准正交基)
标准正交基是,它们所张成的线性空间以下:
经过这个转换:
获得的也是基于直角坐标系的。
咱们先来讲明不一样基下的矩阵的变换思路:
上图中:
综上,咱们能够有:
即矩阵A和矩阵B是能够互相转化的,它们是同一个线性变换在不一样向量基下的不一样表现形式。
推广到通常状况,咱们能够认为,:
那么和
互为类似矩阵。
继续来讨论类似矩阵公式:
前面说到,表明了向量基转换
,上个小节一笔带过了,这个小节咱们来详细讨论下这个转换是如何完成的。
首先给出咱们空间中的一点,例如点:
不论有没有向量基,这个点都是客观存在的。
而后,咱们定义V2的向量基,,以后,咱们给出
点在
的坐标
:
重写在该向量基下的表示:
如今咱们来看另外一个向量基V1,假设咱们知道了在V1,
下的坐标(以下图所示):
那么将V1下的坐标带入原式:
此时,实际上点的坐标,已经从V2变到了V1向量基
下的
:
转换为矩阵形式:
因此其实就是:
,式中,上
是在
下的坐标(向量基)。
由此能够看到,P实际上表明了一种对向量基的转换,或者说是向量基的映射。
Relevant Link:
https://www.matongxue.com/madocs/491.html
设A是数域K上的n级矩阵,若是中有非零列向量a,使得
,则称
是A的一个特征值,称a是A的属于特征值
的一个特征向量。
例如,设
因为
所以,a是A的一个特征值,a是A的属于特征值2的一个特征向量。
若是a是A的属于特征值的一个特征向量,则
从而对于任意的,有
首先,不是全部的矩阵都存在特征值,咱们来看下面这个例子。
设σ是平面上绕原点O的转角为π/3的旋转,旋转是一种线性变换,能够用矩阵来表示线性变换,则σ能够用下述矩阵A来表示:
因为平面上任一非零向量在旋转σ下都不会变成它的倍数,所以在中不存在非零列向量a知足
。从而A没有特征值,没有特征向量。
接下来讨论如何判断数域K上的n级矩阵A是否有特征值和特征向量,若是有的话,怎样求A的所有特征值和特征向量。
设:
是数域K上的矩阵,则是A的一个特征值,a是A的属于
的一个特征向量,等价于下列几个公式:
→
→
→ a 是齐次线性方程组的一个非零解,
→ ,a是
的一个非零解,
因为:
咱们把多项式称为矩阵A的特征多项式。
因而从上面推导获得,是A的一个特征值,a是A的属于
的一个特征向量,等价于:
→ 是A的特征多项式
在K中的一个根,a是齐次线性方程组
的一个非零解。
上述推导过程能够推广为在任意n级矩阵下适用的定理:
(1)是A的一个特征值,当且仅当
是A的特征多项式
在K中的一个根;
(2)a是A的属于特征值的一个特征向量,当且仅当a是齐次线性方程组
的一个非零解
n级矩阵的特征多项式
写出来就是:
因而利用上式可判断数域K上n级矩阵A有没有特征值和特征向量,若是有的话,求A的所有特征值和特征向量的方法以下:
(1)第一步:计算A的特征多项式;
(2)第二步:判别多项式在数域K中有没有根,若是它在K中没有根,则A没有特征值,从而A也没有特征向量。反之,若是
在K中有根,则它在K中的所有根就是A的所有特征值,此时接着作第三步;
(3)第三步:对于A的每个特征值,求齐次线性方程组
的一个基础解系
。因而A的属于
的所有特征向量组成的集合是
设是A的一个特征值,咱们把齐次线性方程组
的解空间称为A的属于
的特征子空间。它的所有非零向量就是A的属于
的所有特征向量。
若是把矩阵看做是运动
特征值、特征向量天然能够称为运动(即矩阵)的特征。
在一个特定向量基下面有一个向量
,咱们先随便左乘一个矩阵
,下图所示:
咱们知道,矩阵乘法的意义是在一个特定的向量基下对向量进行一个线性变换,上图中的变换结果看起来很普通没啥特殊的。
咱们接下来调整下的方向:
实际上,这个矩阵A的特征值有2个,对应的特征向量也有2个,笔者用gif动图展现了对应的特征向量。
笔者这里打开了Av的迹追踪(图中的红点轨迹),能够看到,矩阵A对应的特征向量的方向正好就是A投影离散度最大的方向,同时两个特征向量彼此垂直,关于这点咱们后面讨论PAC降维原理的时候会再谈到。
原始的geogebra连接在这里,读者朋友能够本身上手进行修改和可视化观察。
,其中
为对角阵,
的列向量是单位化的特征向量。
能够看到,矩阵的对角化分解将原矩阵分解为了特征向量和特征值两个部分,这个公式笔者认为是线性代数里最美妙的公式之一了。
总体矩阵表明的最后的运动结果就是这两种的合成。
读者思考:原始矩阵A和与之类似的对角矩阵(由特征值组成),本质上是同一个线性变换在不一样向量基下的不一样表现形式。
Relevant Link:
http://mini.eastday.com/bdmip/180328092726628.html# https://blog.csdn.net/special00/article/details/84033124 http://mini.eastday.com/bdmip/180328092726628.html# https://www.geogebra.org/m/F5dBUqAt https://www.matongxue.com/madocs/228/
咱们上一个章节讨论了矩阵的特征值分解,须要特别注意的是,特征值分解只适用于方阵(矩阵类似也只适用于方阵)。而在现实的世界中,咱们看到的大部分矩阵都不是方阵,虽然在图像处理领域能够经过resize强行得到一个方阵matrix,可是这意味着还没开始处理就先失真了一部分了。
相比于矩阵特征值分解,矩阵奇异值分解,就是一种通用性更强的矩阵特征分解方法,奇异值分解能够适用于任意的矩阵,它本质上也矩阵特征值分解的目的是同样的,都是分解出矩阵的向量方向份量和不一样方向的份量强度。
咱们知道,对于翻绳的这个游戏而言,每轮的花型是由四只手完成的:
咱们能够认为这个花型是由两个方向的力合成的:
咱们能够想象,若是其中一个力(相比另一个力而言)比较小的话,那么绳子的形状基本上由大的那个力来决定:
或者换句话说,每一个花型从力学上均可以分解为两个不一样手方向上的力。不一样的花型,分解的结果也不一样。
了解了奇异值分解的基本感性概念,接下来须要先定义一下矩阵奇异值分解的数学公式定义:
U是一个M * M的方阵(里面的向量是正交的,U里面的向量称为左奇异向量);
Σ是一个M * N的实数对角矩阵(对角线之外的元素都是0,对角线上的元素称为奇异值,常见的作法是为了奇异值由大而小排列);
VT(V的转置)是一个N * N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量);
和
都是酉矩阵,知足
。下图能够很形象的看出上面SVD的定义:
接下来的问题是如何求出SVD分解后的U,Σ,V这三个矩阵呢?方法就是借助特征值分解的方法。
若是咱们将一个任意mxn的矩阵A的转置和A作矩阵乘法,那么会获得n×n的一个方阵 。既然
是方阵,那么咱们就能够进行特征分解,获得的特征值和特征向量知足下式:
这样咱们就能够获得矩阵 的n个特征值和对应的n个特征向量v了。将
的全部特征向量张成一个n×n的矩阵V,就是咱们SVD公式里面的V矩阵了。通常咱们将V中的每一个特征向量叫作A的右奇异向量。
若是咱们将A和A的转置作矩阵乘法,那么会获得m×m的一个方阵 。既然
是方阵,那么咱们就能够进行特征分解,获得的特征值和特征向量知足下式:
这样咱们就能够获得矩阵 的m个特征值和对应的m个特征向量u了。将
的全部特征向量张成一个m×m的矩阵U,就是咱们SVD公式里面的U矩阵了。通常咱们将U中的每一个特征向量叫作A的左奇异向量。
如今U和V咱们都求出来了,接下来求奇异值矩阵Σ,因为Σ除了对角线上是奇异值其余位置都是0,那咱们只须要求出每一个奇异值σ就能够了。
推导公式以下:
这样咱们能够求出咱们的每一个奇异值,进而求出奇异值矩阵Σ。
上面咱们说到, 的特征向量组成的就是咱们SVD中的V矩阵,而
的特征向量组成的就是咱们SVD中的U矩阵,这里咱们来推导证实下,咱们以V矩阵的证实为例:
上式证实中,使用了 ,因此等式能够化简。
能够看出 的特征向量组成的的确就是咱们SVD中的V矩阵。相似的方法能够获得
的特征向量组成的就是咱们SVD中的U矩阵。
进一步咱们还能够看出:特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值知足以下关系:
这样也就是说,咱们能够不用 来计算奇异值,也能够经过求出
的特征值取平方根来求奇异值。
这里咱们用一个简单的例子来讲明矩阵是如何进行奇异值分解的。咱们的矩阵A定义为:
根据上一章节所述,咱们先来求V(右奇异向量),咱们经过将矩阵A的转置乘以矩阵A,获得一个2级方阵,从而能够借助特征值分解来计算奇异值分解。
经过计算矩阵的特征多项式,并求根的方式来计算矩阵的特征值,获得了特征值就获得了特征向量:
,令方程为零,获得方程的根为,对特征值开方既得奇异值:
将奇异值放置在对角位置既得奇异值矩阵:
矩阵的特征向量为:
两个特征向量合起来就是V(右奇异向量)
继续求U(左奇异向量)
合起来既得:
综上得
整个矩阵奇异值分解完毕。
仍是继续上个小节的实际例子,咱们从几何的视角来理解下SVD的概念:
上图展现了一个奇异值分解过程,奇异值分解实际上把矩阵的变换分为了三部分:
方阵没有投影,这里忽略,咱们来看旋转和拉伸:
单位圆先被旋转(90°),x和y坐标系互换,是没有形变的。
再进行拉伸,这里决定了单位圆的形状,奇异值分别是椭圆的长轴和短轴,σ1和σ2表明了在各自方向上的“拉伸力度”:
能够看到,经过两个方向上的拉伸力的综合,棕色的圆被拉伸成了一个绿色椭圆,注意,由于以前已经进行了坐标系的变换,因此此时是一个竖着的椭圆。
最后,再次旋转90°,被旋转到最终的位置,成为一个横着的椭圆,这一过程也没有发生形变,最终就是上图上看到的绿色椭圆了。
对于奇异值,它跟咱们特征分解中的特征值相似,在奇异值矩阵中也是按照从大到小排列,并且奇异值的减小特别的快,在不少状况下,前10%甚至1%的奇异值的和就占了所有的奇异值之和的99%以上的比例。也就是说,咱们也能够用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。
也就是说:
其中k要比n小不少,也就是一个大的矩阵A能够用三个小的矩阵来表示。
以下图所示,如今咱们的矩阵A只须要灰色的部分的三个小矩阵就能够近似描述了。
因为这个重要的性质,SVD能够用于PCA降维,来作数据压缩和去噪。也能够用于推荐算法,将用户和喜爱对应的矩阵作特征分解,进而获得隐含的用户需求来作推荐。同时也能够用于NLP中的算法,好比潜在语义索引(LSI)。
应用老是五花八门,变幻无穷的,笔者这里但愿传递的更可能是SVD中包含的内核思想:无论是image grid数据,仍是NLP序列向量数据,其抽象本质都是matrix矩阵,而matrix做为数据的一种载体,其内部是包含着必定的信息熵的,SVD作的事情就是,找到数据矩阵中混乱度最大的k个方向(混乱度越大,信息熵越大),这是信息熵的本质。更高层来讲,这k个方向能够表明原始数据matrix的特征空间,也能够表明着不一样层次的语义信息,取决于咱们用什么视角来看它,以及上下游stacking的其余model,这是很是灵活的。
Relevant Link:
https://www.cnblogs.com/fuleying/p/4466326.html https://www.geogebra.org/m/kfyxcbee https://www.geogebra.org/m/yJK7STqg
系数在数域K中的n个变量的一个二次齐次多项式,称为数域K上的一个n元二次型,它的通常形式是:
上式也能够写成:
,其中
把上面二次型方程中的系数排成一个n级矩阵A:
把A称为二次型的矩阵,它是堆成矩阵。
显然,二次型的矩阵是惟一的,它的主对角元依次是
的稀疏,它的(i,j)元是
的系数的一半。
令:
则二次型能够写成:
其中A是二次型的矩阵。
用一个例子来讲明:
更通常的:
写成矩阵相乘的形式:
简单来讲,二次型就是经过矩阵研究二次函数,借助矩阵运算的各类高效技巧,能够对各类复杂的二次函数具有更好的处理能力和直观的表现。
设二次曲面S在直角坐标系1中的方程为:
这是一个什么样的曲面呢?
解决这个问题的思路是:依赖坐标系线性变换的不变性,做直角坐标变换,使得在直角坐标系2中,S的方程不包含交叉项,只包含单纯的平方项,那么久能够看出S是什么二次曲面。
设直角坐标系的变换公式为:
,其中T必定是正交矩阵。
从而,上面二次曲面方程能够重写为:
将上式中,中间的3级矩阵记做A,得:
为了使新的方程中不出现交叉项,只要使矩阵为对角矩阵,又因为
,所以也就是只要使
为对角矩阵,这就是但愿A能对角化,而且要找一个正交矩阵T,使A对角化。
因此二次型的主要研究问题就是:对于实数域上的对称矩阵A,可否找到正交矩阵T,使为对角矩阵?
咱们下面来看一些具体的例子。
下面展现了一个原的方程:
咱们经过线性变换,改变一下二次型矩阵:
能够看到,椭圆和圆之间是线性关系,经过矩阵变换就能够从圆变为椭圆,咱们继续扭曲:
咱们发现双曲线和圆之间也是线性关系,准确的说是仿射的。
其实圆、椭圆、双曲线之间关系很紧密的,统称为圆锥曲线,都是圆锥体和平面的交线。上面这几个例子可能仍是不太直观,咱们来看下面的动图:
Relevant Link:
https://www.matongxue.com/madocs/271.html
有了上面对矩阵类似分解,特征值/特征向量的讨论,咱们这节开始讨论PCA主成分分析,这是一种降维手段,了解其底层数学原理后读者朋友会发现其并不复杂,甚至很简单质朴。
先搁置PCA的具体原理概念在一边,这个小节咱们经过一个生活中的常见例子,展现在只有一个特征值的状况下进行降维处理,这里所谓的只有一个特征值指的是降维到能够获得一个1维向量,咱们后面会解释原理,读者朋友这里姑且忽略。
假设如今咱们采集了一组房屋的两个方面的特征数据,【房价、面积】,能够看出二者彻底正相关,有一列实际上是多余的:
把这个二维数据画在坐标轴上,横纵坐标分别为“房价”、“面积”,能够看出它们排列为一条直线:
咱们如今旋转坐标系,让横坐标和这条直线重合:
旋转后的坐标系,横纵坐标再也不表明“房价”、“面积”了(由于咱们转换了向量基),新的坐标系而是二者的混合,这里把它们称做“主元1”、“主元2”,坐标值很容易用勾股定理计算出来,好比在“主元1”的坐标值为下图,同时,很显然
在“主元2”上的坐标为0:
咱们把全部的数据点换算到新的坐标系上:
能够看到,由于“主元2”全都为0,彻底是多余的,咱们只须要“主元1”就够了,这样就把数据降为了一维,并且没有丢失任何信息:
接下来咱们继续上面那个例子,可是咱们稍微修改一下采集到的数据集,将问题变得更贴近现实业务场景一些,标题这里写特征值数量为二,读者朋友也能够先忽略,咱们后面解释:
观察这组数据,很明显,第二列和第一列依然存在着某种正相关,可是这回已经不像上个小节那样是彻底相等了,而是有了一些本身的变化。
把这个二维数据画在坐标轴上,横纵坐标分别为“房价”、“面积”,虽然数据看起来很接近一条直线,可是终究不在一条直线上:
如今新问题来了,这个状况要怎么降维呢?降维后的新的数据又是什么样的呢?
要回答这个问题,咱们须要将思路往回倒退,回到向量在坐标系(向量基)中的表示,以及坐标系的变换这个问题上来。
先讨论只有一个点的状况,在某坐标系有一个点, ,它表示在该坐标系向量基
的线性组合:
当使用不一样的线性变换对坐标系进行线性变换时,在不一样坐标系中, 的值会有所不一样(不一样的坐标系表明了不一样的视角),以下图:
注意, 到原点的距离
不会由于坐标系改变而改变:
因此,在某坐标系下分配给 较多,那么分配给
的就必然较少,反之亦然。最极端的状况是,在某个坐标系下,所有分配给了
,使得
,以下图:
上图对应的就是上个小节咱们的降维结果,将二维的数据彻底无损地降维到了一维。
可是遗憾的是,这个状况在本例的数据集中是不可能的。由于其实上个小节的数据集中隐含了一个重要条件我没有指出,即由于上个小节中的数据集的特征值只有1个,特征向量也只有一个,因此能够从2列直接降维到1列。可是这个小节中的数据特征向量有2个,特征向量也有2个,是不可能无损地降维到一维的。
为何没法无损的降维到1维呢?咱们将问题扩展到两个点 ,就能说清楚缘由了,两个点以上本质是相似的,下图给出一个图示:
能够直观地看到,咱们没法找到一个完美的坐标系,使得a,b点都同时能落在同一个坐标系上,也就说,没法无损地降维到1维。
注意,这里是说”不能无损地降到1维“,若是能够接受数据损失,咱们强行地丢弃另外一个方向上的向量,也是能够降到1维的。
好了!如今咱们已经认命了,即没法无损地降维到1维,这个时候,咱们要改变策略,咱们但愿找到一组新的坐标系,这组坐标系可以知足如下几个特征:
如何实现上述两个目标呢?这就是接下来要详述的PCA算法的原理。
好了,讨论到了这里,感性部分已经阐述完毕,总结一下就是:
以上部分都是一些感性化的讨论,不具有实际操做性。接下来咱们要开始讨论PCA的具体理论,看看如何用数学方式来描述上面的理论并进行实际降维操做。
假设有以下数据:
上图中的2个数据向量,在初始坐标系下(也就是天然基 )下坐标值为:
图示以下:
随着坐标系的不一样, 的值会不断变化(在不一样坐标系下的不一样表现)。
如今咱们的目标是:想尽可能多分配给 ,尽量少的分配给Y一、Y2,根据最小二乘法的思想,就是让下式成立:
要实现上式,就须要找到一个新的坐标系,咱们假设新的坐标系以下:
则原始数据在新坐标系下其中一个坐标系e1的投影为:
带上上面最小二乘公式有:
上式实际上是一个二次型:
这里矩阵 就是二次型,是一个对称矩阵,能够进行以下的奇异值分解:
其中, 为正交矩阵,即
。
而 是对角矩阵:
其中, 是奇异值,
。
将 代回原方程:
由于 是正交矩阵,因此令:
所得的 也是单位向量,即:
继续代回原方程:
至此,最初求最大值的问题就转化为了:
能够用拉格朗日乘子法计算上述条件极值,结果是当 时取到极值。
所以能够推出要寻找的主元1,即:
即:
一样的思路能够求出:
咱们上个章节经过一个具体的例子,推导了如何获得一个最优的降维坐标系。
可是请读者朋友注意的是,上一节对最优化目标的描述是:想尽可能多分配给 ,尽量少的分配给Y一、Y2。这句话仍是过于直观和感性,咱们这节用协方差矩阵的方式来形式化地定义出PCA降维的目标是什么。
PCA降维的本质是基变换,若是咱们必须使用一组新的基来表示原始数据,又但愿尽可能保留原始的信息(保留原始数据的几率分布),咱们应该如何选择?
而不一样的基变换对应了不一样的投影方向,咱们但愿投影后的投影值尽量分散。数据越分散,可分性就越强,可分性越强,几率分布保存的就越完整。 这种分散程度,能够用数学上的方差来表述:
可是光有方差仍是不够的,考虑三维降到二维问题。首先咱们但愿找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而咱们选择第二个投影方向。若是咱们仍是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一块儿”,显然这样的维度是没有用的,所以,应该有其余约束条件。
从直观上说,让两个新的向量基尽量表示更多的原始信息,同时咱们不但愿它们之间存在(线性)相关性的,由于相关性意味着两个字段不是彻底独立,必然存在重复表示的信息。
数学上能够用两个字段的协方差表示其相关性:
,这里Y表示第二个向量基。
当协方差为0时,表示两个字段彻底独立。为了让协方差为0,咱们选择第二个基时只能在与第一个基正交的方向上选择。所以最终选择的两个方向必定是彼此正交的。
用协方差矩阵来统一表示同一个向量基内数据的离散方差及不一样向量基间相关性协方差这两个数学概念:
根据上述推导,咱们要达到的优化目标,用数学语言等价于:将协方差矩阵对角化,即除对角线(方差要尽量大)外的其它元素化为0(协方差为0),而且在对角线上将元素按大小从上到下排列(这样便于咱们筛选出方差最大的k个向量基),这样咱们就达到了优化目的。
均可以进行奇异值分解:
矩阵P上个章节解释过了,指的是原始数据的二次型矩阵。协方差矩阵 的奇异值分解和
相差无几,只是奇异值缩小了
倍,可是不妨碍奇异值之间的大小关系,因此在实际问题中,每每都是直接分解协方差矩阵
。
考虑采样y=sin(x)半个周期所得到的数据:
虽然上述数据显然是线性不相关的(平均而言,当x值增长时,y值增长的和它减小的同样多),所以对应于一个对角的协方差矩阵,但这两个变量之间仍然有明确的非线性关系。
通常状况下,PCA会减小数据中的线性相关性,但不会删除统计相关。若是咱们的数据集是非线性相关的,那么可能不适合用PCA进行降维。
PCA的一个最大假设是,最能区别的信息经过特征空间中的最大方差捕获。由于最大方差方向编码的信息最多,这极可能是真的。
然而,有一些状况,其中的区别信息实际驻留在最小方差的方向,使得PCA能够大大损害分类性能。举个例子,考虑下图的两种状况(将二维特征空间降到1D表示):
若是最能区别的信息包含在较小的特征向量中,应用PCA实际上可能恶化维数的诅咒,由于如今须要更复杂的分类模型(例如非线性分类器)来分类低维问题。在这种状况下,其余降维的方法可能会感兴趣,如线性判别分析(LDA),其试图找到可以一个映射向量,该向量最优的分开两个类别。
PCA降维,须要找到样本协方差矩阵 的最大的k个特征向量,而后用这最大的k个特征向量张成的矩阵来作低维投影降维。能够看出,在这个过程当中须要先求出协方差矩阵
,当样本数多样本特征数也多的时候,这个计算量是很大的。
注意到咱们的SVD也能够获得协方差矩阵 最大的k个特征向量张成的矩阵,并且同时SVD有个好处,有一些SVD的实现算法能够不用先求出协方差矩阵
,也能求出咱们的右奇异矩阵V。也就是说,咱们的PCA算法能够不用作特征分解,而是作SVD来完成。这个方法在样本量很大的时候颇有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是咱们咱们认为的暴力特征分解。
另外一方面,注意到PCA仅仅使用了咱们SVD的右奇异矩阵,没有使用左奇异矩阵,那么左奇异矩阵有什么用呢?
假设咱们的样本是m×n的矩阵X,若是咱们经过SVD找到了矩阵 最大的k个特征向量张成的m×k维矩阵U,则咱们若是进行以下处理:
能够获得一个k x n的矩阵X‘,这个矩阵和咱们原来的m×n维样本矩阵X相比,行数从m减到了k,可见对行数进行了压缩,左奇异矩阵能够用于行数的压缩。
右奇异矩阵能够用于列数即特征维度的压缩,也就是咱们的PCA降维。
Relevant Link:
https://www.cnblogs.com/LittleHann/p/6558575.html#_lab2_1_7 https://zhuanlan.zhihu.com/p/31386807 https://www.matongxue.com/madocs/306.html https://www.cnblogs.com/LittleHann/p/6558575.html#4208658 https://www.zhihu.com/question/41120789/answer/481966094