利用 PCA 来对数据降维

利用 PCA 来对数据降维,第1张

降维往往作为预处理步骤,其中独立成分分析、因子分析和主成分分析比较流行,主成分分析(PCA)最为广泛。

主成分分析会通过线性组合将多个原始变量合并成若干个主成分,这样每个主成分都变成了原始变量的线性组合。这种转变的目的,一方面是可以大幅降低原始数据的维度,同时也在此过程中发现原始数据属性之间的关系。

主成分分析的主要步骤如下:
1)通常要先进行各变量的标准化工作,标准化的目的是将数据按照比例进行缩放,使之落入一个小的区间范围之内,从而让不同的变量经过标准化处理后可以有平等的分析和比较基础。
2)选择协方差阵或者相关阵计算特征根及对应的特征向量。
3)计算方差贡献率,并根据方差贡献率的阀值选取合适的主成分个数。
4)根据主成分载荷的大小对选择的主成分进行命名。
5)根据主成分载荷计算各个主成分的得分。

将主成分进行推广和延伸即成为因子分析(Factor Analysis),因子分析在综合原始变量信息的基础上将会力图构筑若干个意义较为明确的公因子;也就是说,采用少数几个因子描述多个指标之间的联系,将比较密切的变量归为同一类中,每类变量即是一个因子。之所以称其为因子,是因为它们实际上是不可测量的,只能解释。

主成分分析是因子分析的一个特例,两者的区别和联系主要表现在以下方面:
❑ 主成分分析会把主成分表示成各个原始变量的线性组合,而因子分析则把原始变量表示成各个因子的线性组合。这个区别最直观也最容易记住。
❑ 主成分分析的重点在于解释原始变量的总方差,而因子分析的重点在于解释原始变量的协方差。
❑ 在主成分分析中,有几个原始变量就有几个主成分,而在因子分析中,因子个数可以根据业务场景的需要人为指定,并且指定的因子数量不同,则分析结果也会有差异。
❑ 在主成分分析中,给定的协方差矩阵或者相关矩阵的特征值是唯一时,主成分也是唯一的,但是在因子分析中,因子不是唯一的,并且通过旋转可以得到不同的因子。

主成分分析和因子分析在数据化运营实践中主要用于数据处理、降维、变量间关系的探索等方面,同时作为统计学里的基本而重要的分析工具和分析方法,它们在一些专题分析中也有着广泛的应用。

PCA借助于一个正交变换,将其分量相关的原随机变量转化成其分量不相关的新随机变量。主要作用是对高维数据进行降维。PCA把原先的n个特征用数目更少的k个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关。

PCA 可以从数据中识别其主要特征,它是通过沿着数据最大方差方向旋转坐标轴来实现的。选择方差最大的方向作为第一条坐标轴,后续坐标轴则与前面坐标轴正交。协方差矩阵上的特征值分析可以用一系列的正交坐标轴来获取。

优点: 降低数据的复杂性,识别最重要的多个特征。
缺点: 不一定需要,且可能损失有用信息。

PCA的主要算法如下:
组织数据形式,以便于模型使用;
计算样本每个特征的平均值;
每个样本数据减去该特征的平均值(归一化处理);
求协方差矩阵;
找到协方差矩阵的特征值和特征向量;
对特征值和特征向量重新排列(特征值从大到小排列);
对特征值求取累计贡献率;
对累计贡献率按照某个特定比例选取特征向量集的子集合;
对原始数据(第三步后)进行转换。

其中协方差矩阵的分解可以通过按对称矩阵的特征向量来,也可以通过分解矩阵的SVD来实现,而在Scikit-learn中,也是采用SVD来实现PCA算法的。这里给出带SVD的原始算法和Scikit-learn模块实现的PCA类。

Matlab中关于pca函数的说明写得并不直观, 很多人最直接的目的只是想得到pca降维后的结果 ,但是根据官方解释文档,很难一下看出哪个输出参数才是最终降维后的特征。因此,本文记录如何使用Matlab中自带的pca函数对数据进行降维。

PS 本文并不详解pca的原理,仅仅记录如何使用Matlab中的pca函数。

输入参数:X是n x d的样本矩阵,其中n表示样本数,d表示特征纬度。

输出参数:
(1)coeff是主成分分量,即样本协方差矩阵的特征向量。
(2)score是主成分,即样本X在低维空间的投影,也就是我们想要得到的降维后的数据。

注意:score的维度和原始样本X的维度一致,若需要降到k维,则只需要取score的前k列即可。

此外,也可以根据coeff计算得到score,以下是具体步骤:
(1)计算样本X沿特征纬度的均值向量(因为X的每一列代表一个特征,因此此时是按照行计算均值):

(2) 利用去中心后的X乘上coeff便可以得到score:

运行后便可以看到res的结果非常非常小,此时便说明test和score非常接近。

[1] PCA原理分析和Matlab实现方法(三)
[2] Matlab: princomp() 主成分分析

PCA(Principal Component Analysis),即主成分分析方法,是一种使用广泛的数据降维算法。详细的概念可以参照 >依照你的x0初始化来看,第一行对应一个变量(比如a),第二行对应另一个变量(如b)。这样x0其实就是[a1,a2,a3,;b1,b2,b3,],每一次测量代表观测一次[a,b]。也就是说你的参数空间是2维的,x0每一列代表一次测量结果。而matlab cov(x)函数,x的每一行代表一次测量结果。因此输入cov函数时需要一个转置。之后你得到两个特征根和特征向量,这两个特征向量张成2维空间。
如果用x0, 就相当于你的变量有5个a,b,c,d,e 观测了两次得到样本[a1,b1,c1,d1,e1;a2,b2,c2,d2,e2]。这时你的主成分是5维的,在5维参数空间,两次观测就是两个点,这两个点只能画一条直线,它对应唯一一个非0本征值,其余本征值都是0


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13213897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-21
下一篇 2023-06-21

发表评论

登录后才能评论

评论列表(0条)

保存