主成分分析PCA

- 什么是PCA
一种统计方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分

- PCA的目的
在使用数学统计方法研究具有多变量的问题时,我们知道,变量越多,问题越复杂,越不容易解决。但是,一般来说,有些变量之间其实是有联系的,用线性代数的语言来说就是线性相关。

如果我们可以通过一个变量推测与之线性相关的变量,那么我们就不需要同时解决这两个变量。主成分分析就是将一个问题里面线性相关的变量去除,建立新的线性无关的变量,并且尽量保证这些新的变量还可以保持原有的信息(毕竟如果变量是变少了,但是问题信息也因此改变了,那么我们仍然是不可能解决问题的)。

因此,主成分分析的目的就是使用更少的变量(这里的变量不属于原有变量,是建立的新的变量,称之为主成分)去尽可能代替原有的较多变量,就可以通过分析这些主成分来分析解决问题。

  • PCA的数学原理

1.数据的向量表示

数据是可以用向量表示的,例如某个淘宝店某全年的流量及交易情况可以看成一组记录的集合,其中每一天的数据是一条记录,格式如下:

(浏览量, 访客数, 下单数, 成交数, 成交金额)

我们得到一组记录,每条记录可以被表示为一个五维向量,其中一条看起来大约是这个样子:

(500,240,25,13,2312.15)T

从上面我们可以看到,这家店铺的盈利与五个元素有关,但是也许下单数和成交数这两个元素占大部分原因,那么我们也许可以只用两个元素来计算如何获取最大盈利,这就要用到数据降维

数据降维意味着原始信息的减少,而信息减少则会影响我们的对问题的研究。因此我们的目标就是找出可以尽可能代表最多原始信息的尽少元素,这种元素就叫主成分(注意,这里的主成分不一定属于原始数据元素)。

2.基

一个向量的表示依赖于基的选择。
在这里插入图片描述
如上图所示,(5,5)在以(0,1)(1,0)为基时,向量表示为(5,5),但在以在这里插入图片描述`为基底时,向量表示为在这里插入图片描述
从上面我们可以看出向量表示实际上是向量在基上的投影。

3向量的矩阵表示

向量虽然可以表示数据,但是却没有办法处理数据。尽管向量有加减内积、叉乘等计算方式,但是对于研究问题是需要处理大量数据的我们来说还远远不够。因此,我们需要用到矩阵(矩阵的计算可太妙了!)。那么向量怎么变换成矩阵呢?
在这里插入图片描述
参考上图我们可以看出矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的坐标。推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值
在这里插入图片描述
在推广一下,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果。
在这里插入图片描述
特别要注意的是,这里R可以小于N,而R决定了变换后数据的维数。也就是说,我们可以将一N维数据变换到更低维度的空间中去,变换后的维度取决于基的数量。因此这种矩阵相乘的表示也可以表示降维变换。

4协方差矩阵

我们得知基的数量少于向量本身的维数,则可以达到降维的效果。那么我们该如何选择基来使降维后的信息保存的尽可能多呢?

举个例子,假设我们的数据由五条记录组成,将它们表示成矩阵形式:
在这里插入图片描述
其中每一列为一条数据记录,而一行为一个字段。
将之画在直角坐标系内
在这里插入图片描述
若要想对上面数据进行降维,即二维变成一维,可以看作将直角坐标系内的点投影到直线上。如上图所示,我随便画了一条线,可以看到实际上有两个点投影是重合的,即他们所携带的信息在降维时重合了。而我们想要保存尽量多的原始信息则必须避开这种情况,因此我们可以希望投影后的数据也尽可能的分散。

那么问题来了,怎样我们才知道投影后的数据是否分散呢?在数学上,我们可以用这组数据的方差来判断:

假设每个字段的均值都化为0
在这里插入图片描述
于是上面的问题数学表示:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大

但是假如扩展到三维压缩到二维,使用方差我们会发现这两个基的方向会一致,这显然会使信息大大折叠。从直观上说,让2个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着2个字段不是完全独立,必然存在重复表示的信息。

数学上可以用两个字段的协方差表示其相关性,由于已经让每个字段均值为0,则:
在这里插入图片描述
当协方差为0时,表示两个字段完全独立。为了让协方差为0,我们选择第二个基时只能在与第一个基正交的方向上选择。因此最终选择的两个方向一定是正交的。

进一步扩展将一组N维向量降为K维(K大于0,小于N),则要选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。

事情已经见到曙光了,现在我们最后的问题是如何找出这样的正交基?协方差矩阵来了。

在这里插入图片描述
这个矩阵对角线上的两个元素分别是两个字段的方差,而其它元素是a和b的协方差。两者被统一到了一个矩阵!

最后根据上面我们想要达到的要求:方差尽可能大,协方差为0。这不就是矩阵对角化吗:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列。

设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:
在这里插入图片描述

最后我们知道了,我们所要做的就是寻找一个矩阵P,满足PCPT是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。

最后的最后就是如何解P的问题了,这就是线性代数的基本功了。百度一下你就知道。下面列出PCA算法的步骤:

- PCA的算法步骤
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵C=1/m•X•XT(XT为矩阵X的转置)
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据

- PCA主要步骤
进行主成分分析主要步骤如下:

  1. 指标数据标准化(SPSS软件自动执行);
  2. 指标之间的相关性判定;
  3. 确定主成分个数m;
  4. 主成分Fi表达式;
  5. 主成分Fi命名。

最后贴出PCA示例代码:

X=[2.5 2;
   0.5 0.8;
   2.3 2.9;
   2.0 3.1;
   1.6 1.7;
   1.2 1.1;
   0.9 0.8;];
X=X'
[a,b]=size(X);
M=sum(X)/a;

for i=1:b
    B(:,i)=X(:,i)-M(i);
end
S=1/(a-1)*B*B';
[vector,value]=eig(S);
vector
value=diag(value);
varine=sum(value);

[value_sort,subscript]=sort(value,'descend');
value_sort;
subscript;
value_sort=value_sort/sum(value_sort);
compare=0;
sign=0;
for i=1:b
    if compare<0.9
        sign=sign+1;
        compare=compare+value_sort(i);
    end
end
for i=1:sign
    P(:,i)=vector(:,subscript(i));
end
P
D=zeros(sign,sign);
for i=1:sign
    D(i,i)=value(subscript(i));
end
D
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值