主成分分析及其实例

1.主成分分析概念

主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息。一般来说,当研究的问题涉及到多变量且变量之间存在很强的相关性时,我们可考虑使用主成分分析的方法来对数据进行简化。

作用:

数据降维:PCA的主要目标是将高维数据转化为低维数据,同时尽可能地保留原始数据的信息。这有助于减少数据的复杂性,降低计算成本,以及更好地可视化数据。

线性变换:PCA通过线性变换来实现数据的降维,具体来说,它通过找到数据中的主成分(Principal Components)来构建新的特征空间。主成分是原始特征的线性组合,具有最大的方差,因此保留了最重要的信息。

方差最大化:PCA的关键思想是通过选择那些具有最大方差的主成分来捕获数据的主要变化方向。这意味着在新的特征空间中,第一个主成分捕获了最多的变化,第二个主成分捕获了次多的变化,以此类推。

正交性:主成分是正交的,意味着它们之间彼此独立,不相关。这有助于消除特征之间的冗余信息,使得新的特征空间更具有解释性。

特征值分解:PCA使用特征值分解或奇异值分解等数学方法来计算主成分。通过计算协方差矩阵的特征向量和特征值,可以确定主成分。

选择主成分数量:在应用PCA时,通常需要选择要保留的主成分数量。这可以根据特征值的大小或者保留一定比例的总方差来确定。

应用领域:PCA广泛用于数据压缩、图像处理、模式识别、数据可视化以及特征工程等领域,它有助于简化复杂的数据集并提取关键信息。

总之,主成分分析是一种强大的数据分析工具,其思想在降维和特征提取方面具有广泛的应用,能够帮助我们更好地理解和处理高维数据集。通过识别主要变化方向,PCA有助于减少数据的维度,同时保留关键信息,从而改善数据分析和建模的效果。
 

2.主成分分析原理

对于一个含有n个数据,变量的个数为p的一个样本,我们可以用p维空间的n个点来表示这些数据。例如含有2个变量,3个数据(1,2),(2,2),(3,3)的样本,即可以表示为:

如果含有3个变量,就是三维空间中的散点。

通常情况下,我们在实验初会提出很多变量,并且采集这些数据,这些数据中各个变量往往会存在一定的相关性。而这些相关性便意味着可以进行数据的降维,用更少的变量来替代这些变量。事实上,在很多情况下数据的降维是十分必要的,一方面有利于问题的简化,另一方面便于计算机的计算:数据降维后变量的减少,会使计算机处理的数据大大减少,从而缩短数据处理时间。

主成分分析的直观理解,可以认为是旋转坐标轴,使得在旋转坐标轴后这些点在新的坐标系下在各个坐标轴(变量)方向投影的方差变大。其中如果在某坐标上的方差最大,那么这个坐标轴对应的这些散点的坐标就是第一主成分,其次就是第二主成分,依此类推。

 对于上图的8组数据,我们发现在x轴方向方差很大,在y轴方向方差为0,所以就可以用这些点的横坐标数据作为第一主成分,并且只选第一主成分便可以达到要求。

对于下图的情况,我们发现这些数据都几乎排列在一条直线上,并且在x轴方向和y轴方向的方差都比较大。但是如果把坐标轴旋转一定角度,使得这些数据在某个坐标轴的投影的方差比较大,便可以用新坐标系下方差较大的一个坐标轴坐标作为主成分。

 对于左图,数据为(1,2)、(2,4)......旋转坐标轴后,坐标为(,0)、(,0)......这样主成分就是新坐标系下变量x的数值:。

对于大多数情况,数据各个变量基本服从正态分布,所以变量为2的数据散点分布大致为一个椭圆,变量为3的散点分布大致为一个椭球,p个变量的数据大致分布在一个超椭圆。而通过旋转坐标系,使得超椭圆的长轴落在一个坐标轴上,其次超椭圆另一个轴也尽量落在坐标轴上。这样各个新的坐标轴上的坐标值便是相应的主成分。

 例如,对于上图的数据,在x轴和y轴的方差都很大,所以可以旋转坐标系,使得椭圆两个轴尽量落在坐标轴上。

 这样,我们便以散点在新坐标系下的x坐标作为第一主成分(因为x方向方差最大),y轴的坐标为第二主成分。

主成分分析的理论推导较为复杂,需要借助投影寻踪,构造目标函数等方法来推导,在多元统计的相关书籍中都有详细讲解。但是其结论却是十分简洁。所以,如果只是需要实际应用,了解主成分分析的基本原理与实现方法便足够了。
 

3.主成分分析计算步骤

PCA的计算步骤
假设有n个样本,p个指标,则可以构成大小为n*p的样本矩阵x:

1.我们首先对其进行标准化处理:

2.计算标准化样本的协方差矩阵:

3.计算R的特征值和特征向量:

4.计算主成分贡献率以及累计贡献率:

5.写出主成分:

6.根据系数分析主成分代表的意义:

对于某个主成分而言,指标前面的系数越大,代表该指标对于该主成分的影响越大。


7.利用主成分的结果进行后续的分析:

1.主成分得分千万别用于评价类模型。
2. 主成分可用于聚类分析。
3. 主成分可用于回归分析。
 

4.主成分分析的实现

兔兔这里以一种玉米的各个表现型数据为例,表现型分别为EH、SD、PH、FW、SFBN、IL、MEL、ELL、ELW、FLDW、ELA、TDW十二种,分别表示:穗位高(cm)、茎粗(cm)、株高(cm)、鲜质量(g)、雄花分枝数(个)、花序长度(cm)、雄穗长度(cm)、穗位叶长(cm)、穗位叶宽(cm)、功能叶干质量(g)、穗位叶面积(cm2)、总干质量(g)。
 

import numpy as np
import pandas as pd
 
df=pd.read_csv('corn.csv') #读取文件
df=pd.DataFrame(df)
R=df.corr() #样本相关阵
l,T=np.linalg.eig(R) #求特征值l与特征向量T,特征值默认从大到小排序
n,p=df.shape 
s=0
t=0
cr=[] #累计贡献率
for i in range(len(l)):
    t+=1
    contri=l[i]/np.sum(l) #第i主成分贡献率
    cr.append(contri)
    s+=contri #累计贡献率
    if s>=0.8: #累计贡献率达80%即停止
        break
pc=[] #主成分
for i in range(t):
    Y=np.dot(df,T[i].T) #计算第i主成分
    pc.append(Y)
factor_loading=[]
for i in range(t):
    a=[]
    for j in range(p):
        a.append(np.sqrt(l[i])*T[i][j]) #计算第i主成分在第j个变量上的载荷
    factor_loading.append(a)
factor_loading=np.array(factor_loading)
print('主成分个数:',t)
print('主成分:',np.mat(pc))
print('贡献率:',cr)
print('累计贡献率:',s)
print('因子载荷:',factor_loading)

通过上面的步骤,便可以求出各个数据。我们运行程序,发现只需要3个主成分便满足要求,并且累计贡献率接近88%,效果比较好。

通过最终的因子载荷,我们也能依据主成分在各个指标上的载荷大小来总结该主成分。不过我们发现,最终的主成分中含有负数值,但实际上,无论是叶片的面积,还是质量,或是总结成光合速率,都难以解释这些负数值,说明此时利用主成分分析是存在问题的,需要用其它的方法进行数据降维,如因子分析等。但如果不需要考虑实际意义,单纯就是进行数据降维,然后进一步做聚类、回归等,该方法也是可以使用的。
 

5.总结

1.主成分分析优点

以方差衡量信息的无监督学习,不受样本标签限制。
由于协方差矩阵对称,因此k个特征向量之间两两正交,也就是各主成分之间正交,正交就肯定线性不相关,可消除原始数据成分间的相互影响。
可减少指标选择的工作量,而且计算方法简单,易于在计算机上实现。

2.主成分分析优点

主成分解释其含义往往具有一定的模糊性,不如原始样本完整。
贡献率小的主成分往往可能含有对样本差异的重要信息,也就是可能对于区分样本的类别(标签)更有用。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值