欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于R的主成分分析

程序员文章站 2022-07-10 23:36:24
...

基于R的主成分分析

  1. 背景介绍
  2. 数学原理推导
  3. 基于R的实验
  4. 结论

背景介绍

这一讲,我们讲讲主成分分析( Principal Component Analysis),这是一种非常经典的方法。经常和主成分分析一起出现的是另一种经典的方法,叫因子分析(factor analysis)。其实这两个方法还是不一样的,主成分分析的基本思想是:寻求现有许多自变量的一个线性组合,并且呢,这个线性组合的方差要最大,方差最大则保证了信息的有效提取。那么这个线性组合就是第一个主成分,那么第二个主成分是如何找到的,第二个主成分和第一个主成分是相互正交的,这样就把第二个主成分也找到了,依次后面的主成分就都找到了。

数学推导

J(u1)=1NNn=1(uT1xn)2=1N(uT1xn)(xTnu1)=uT1u1
其中=1NxnxTn,表示样本方差
所以上式其实表达的是,初始特征x经过线性组合成为ux,并且呢,此时方差要最大。也就是uT1u1要最大。但是光有这一个条件是不行的,在加上一个约束条件,那就是对u的单位化约束,即uTu=1,于是主成分分析就可以写成下面的约束优化问题:

u1= argmaxuuTusubject  to  uTu=1

大家看这样的话,就把主成分分析变成了一个约束优化问题,很容易想到用拉格朗日乘子法计算,因此又可以变成下式。
L(u,x)=uTuλ(uTu1)

下面对这个式子求梯度 ,并且让它等于0,我们得到下式:
u=λu

这里就奇妙了,大家看到,其实我们需要的主成分方向,或者说是原始特征的线性组合其实就是样本协方差的特征向量。这里呢,我们对上式两边乘以uT,得到下式。
uTu=uTλu=λuTu=λ

这样呢,就利用了约束条件,uTu=1,说明在约束条件下,目标函数最大对应的λ就是对应的特征值。所以呢,各个特征值与特征向量恰好就是目标函数最优时我们想要的结果。

基于R语言的实验

主成分分析在R语言或者其他语言里边都是很容易实现的,大家通过上面的推导可以发现,就是对一个矩阵求解特征值和特征向量。

#引入数据
data(swiss)
#将每个样本的名字去掉
df = swiss[,-1]
#查看一下数据
head(df)

             Agriculture Examination Education Catholic Infant.Mortality
Courtelary          17.0          15        12     9.96             22.2
Delemont            45.1           6         9    84.84             22.2
Franches-Mnt        39.7           5         5    93.40             20.2
Moutier             36.5          12         7    33.77             20.3
Neuveville          43.5          17        15     5.16             20.6
Porrentruy          35.3           9         7    90.57             26.6
#进行主成分分析,并且将结果保存到pac_result
pca_result = prcomp(swiss,center = TRUE, scale = TRUE)
#查看结果
summary(pca_result)
Importance of components%s:
                          PC1    PC2    PC3     PC4     PC5     PC6
Standard deviation     1.7888 1.0901 0.9207 0.66252 0.45225 0.34765
Proportion of Variance 0.5333 0.1981 0.1413 0.07315 0.03409 0.02014
Cumulative Proportion  0.5333 0.7313 0.8726 0.94577 0.97986 1.00000

结论

通过上面,我们简单做了一个主成分分析的介绍。那么主成分分析需要提取几个呢,一般是看累积百分比,从上面的这个例子来看,提取三个比较合适了,因为前面两个主成分已经占了87%了,剩下的几个主成分意义不大了。主成分分析除了降维,还可以用在异常检测方面,后面我们会介绍。在实际当中,主成分分析要比因子分析用的范围广一些。

相关标签: 统计