PCA(主成分分析)

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。数据降维是无监督学习的另外一个常见问题。

数据的向量表示及降维问题

我们知道很多机器学习算法的复杂度和数据的维数有着密切关系,甚至与维数呈指数级关联,再这种情况下,及其学习的资源消耗是不可接受的,因此我们必须对数据进行降维。降维当然意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低。

向量的表示及基变换

内积与投影

两个维数相同的向量的内积被定义为:

内积的另一种计算公式为:

A与B的内积等于A到B的投影长度(|A|cos(a))乘以B的模,如果B的模为1,即让|B|=1,那么上式就变成了:

也就是说,设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度。这就是内积的一种几何解释。

基变换

要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值,就可以了。比如,以(1,0)和(0,1)为基,可以有向量(3,2);如果给出一组新的基 和(1/2,1/2)和(−1/2,1/2) ,因为我们一般都让基的模为1,所以我们要计算(3,2)在新基上的坐标,根据上面内积的几何意义,我们只要分别计算(3,2)和两个基的内积,不难得到新的坐标为 (5/2,−1/2) 。另外这里要注意的是,我们列举的例子中的基是正交的,但成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质,所以一般使用的基都是正交的。

下面我们找一种简便的方式来表示基变换。还是拿上面的例子,想一下,将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新的坐标分量。实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:

一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。

数学表示为:

其中pi是一个行向量,表示第i个基,aj是一个列向量,表示第j个原始数据记录。

特别要注意的是,这里R可以小于N,而R决定了变换后数据的维数。也就是说,我们可以将一N维数据变换到更低维度的空间中去,变换后的维度取决于基的数量。因此这种矩阵相乘的表示也可以表示降维变换。

最后,上述分析同时给矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。更抽象的说,一个矩阵可以表示一种线性变换。

协方差矩阵及优化目标

上面我们讨论了选择不同的基可以对同样的一组数据给出不同的表示,而且如果基的数量少于向量本身的维数,则可以达到降维的效果。那么由一个关键性的问题:如何选择基才是最优的,如果选择基才能尽量保留最多的原始信息。

一种直观的看法是:希望投影后的投影值尽可能分散。

方差

上文说到,我们希望投影后投影值尽可能分散,而这种分散程度,可以用数学上的方差来表述。次数,一个字段的方差可以看作是每个元素与字段均值的差的平方和的均值,即:

���(�)=1�∑�=1�(��−�¯)2

由于上面我们已将每个字段的均值都化为0了,因此方差表示为:

于是上面的问题被形式化表述为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。

协方差

对于二维降维一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维到二维。与之前相同,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。

如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是"几乎重合在一起",显然这样的维度是没有用的。因此,应该有其他约束条件。从直观上来说,让两个字段尽可能表示更多的原始信息,我们不希望它们之间存在相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。

数学上可以用两个字段的协方差表示其相关性,由于已经让每个字段均值为0,则:

当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在于第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。

至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,去取最大的K个方差)。

协方差矩阵

我们看到,最终要达到的目的与字段内方差及字段间协方差有密切关系。因此我们希望能将两者同一表示,仔细观察发现,两者均可以表示为内积的形式,而内积由与矩阵相乘密切相关。

假设我们只有a和b两个字段,那么我们将它们按行组成矩阵X :

然后我们用X乘以X的转置,并乘上系数1/m:

这个矩阵对角线上的两个元素分别时两个字段的方差,而其他元素时a和b的协方差,两者被统一到了一个矩阵。

推到到一般情况:

设我们有m个n维数据记录,将其按列排成n乘m的矩阵X,设 �=1���� ,则C时一个对称矩阵,其对角线分别时各个字段的方差,而第i行j列和j行i列的元素相同,表示i和j两个字段的协方差。

协方差矩阵对角化

根据上述推导,我们发现要达到优化目标,等价于将协方差矩阵对角化:即除对角线外的其他元素化为0,并且在对角线上将元素按大小从大到小排列。这些优化目标都是将原始数据映射到新基上之后来说明的,我们协方差矩阵对角化也是对基变换后数据协方差矩阵的对角化,那我们需要将优化目标转换到原始数据的优化问题上,使得我们可以求解。我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:

设原始数据矩阵X对应的协⽅差矩阵为C,⽽P是⼀组基按⾏组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协⽅差矩阵为D,我们推导⼀下D与C的关系:

因此更加明晰,我们要找的P不是别的,而是能让原始协方差矩阵对角化的P。换句话说,优化目标变成了寻找一个矩阵P,满足PCP^(T)时一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。

协方差矩阵C时一个对称矩阵,其对角化在这里不再赘述。

PCA算法

PCA是一种线性降维算法,总结一下PCA的算法步骤:

PCA实例

λ1=2,λ2=2/5

降维投影结果如下图:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值