1.AutoEncoder
AutoEncoder称之为自编码器,自编码器过程如下:
我们的目标是使得 越接近越好。x经过Encoder后得到y(code)可以看作是一个降维的过程,因此与PCA类似。AutoEncoder原理十分简单,可以利用y(code)做分类,在y(code)较少的情况下,则需要考虑加入噪音来平衡。
2. PCA涉及数学知识
PCA是一种数据分析方法,将原始数据变换成一组各维度线性无关的表示,可以用来提取主要特征,进而实现降维。众所周知,在机器学习算法中,算法的复杂度与数据的维度是紧密相关的,因此提取数据的主要特征来降低算法的复杂度是一个不错的选择。
相关性:两个变量的关联程度。举个例子:电商某一商品的销量与访问量相关,一般情况下访问量高,销量也高,如果此时删除访问量,根据销量也可以推出访问量的大小(反之亦然),因此访问量这个属性对数据分析影响不大。再举个例子:新生入学,男女选项有两个,设置为0和1,即非男即女(阴阳人不算),如果在男女结果两列中删除一列,可以根据一列推出另一列的值。上面两个例子都可以看出本来两个属性(字段),删除其中一个,依然可以根据另一个推出,这就是直观理解降维过程了。
内积几何解释:向量A和向量B,A B=|A|*cos( )*|B|,也就是A在B上的投影长度 B的模。
基:在线性代数中,基(也称为基底)是描述、刻画向量空间的基本工具。向量空间的基是它的一个特殊的子集,基的元素称为基向量。向量空间中任意一个元素,都可以唯一地表示成基向量的线性组合。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数-----来自百度百科。说来说去,基就类似于一个单位,某一个向量可以表示为基向量的线性组合,基向量的维度决定了变换后向量的维度,因此在降维中可以选择维度较小的基。
问题在于:在PCA降维过程中如何合理的选择基呢?(先留着,最后回答)
具体问题:在尽量保持原有二维数据的信息的基础上,如何用一维数据来表示二维数据呢?
采用的方法是:选取一条直线,把所有二维上的点投影到该直线上,计算出新的坐标,最合理的直线选择就是希望投影后的投影值尽可能的分散,这样对原有数据影响最小。
方差:在数学上有一个术语可以用来衡量数据的分散程度,那就是方差。
如果把数据a中所有字段都去均值,则方差就如下:
此时降维问题就可以表示为:寻找一个低维度的基,使得所有数据在新基上表示后,新的坐标(值)方差最大。
协方差:对于高维(3维以上),我们希望找到一个方向,使得向量投影后的方差最大,但如果低维有2个以上分量该如何做呢?(如何投影?)此时就不能像在2维降低到一维一样投影了。在利用新的基变换后的字段尽可能表示更多的原始信息,同时希望变换后的字段(分量)之间无相关性,否则就重复表示了(见相关性解释)。在数学上,协方差可以表示相关性,协方差为0的两个随机变量不相关,但是不一定独立。
降维优化的目标直观表达:将一组N维向量降低至K维(K>0,K<N),目标是选择K个单位(模为1)的正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。
矩阵乘法:在链接中第1,2节有介绍。矩阵乘法可以看作是(行/列)向量的线性组合。
Jainszhang:MIT线性代数zhuanlan.zhihu.com
协方差矩阵:上面我们导出了优化目标,但没有说怎么做。所以我们要继续在数学上研究计算方案。我们看到,最终要达到的目的与字段内方差及字段间协方差有密切关系。因此我们希望能将两者统一表示,仔细观察发现,两者均可以表示为内积的形式,而内积又与矩阵相乘密切相关。于是我们来了灵感:假设我们只有a和b两个字段,那么我们将它们按行组成矩阵X:
然后让 ,再乘系数 得到如下:
这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差,两者被统一到了一个矩阵中。
设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设C= ,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。
协方差对角化:根据上述推导,我们发现要达到优化目前,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:
此时优化目标变为:寻找一个矩阵P,满足 是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。
由上文知道,协方差矩阵C是一个是对称矩阵,在线性代数上,实对称矩阵有一系列非常好的性质:
1)实对称矩阵不同特征值对应的特征向量必然正交。
2)设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应于λ,因此可以将这r个特征向量单位正交化。
由上面两条可知,一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量,设这n个特征向量为 ,按列组成矩阵:
在此处已经找到了矩阵P, 。P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。如果设P按照Λ中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。
介绍完了PCA数学过程,下面给出PCA的算法过程:
3. PCA算法过程
总结一下PCA的算法步骤:
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据