主成分分析(PCA)步骤及代码

这篇具有很好参考价值的文章主要介绍了主成分分析(PCA)步骤及代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

主成成分分析


前言

  主成分分析(Principal Component Analysis,PCA), 简称PCA,是一种统计方法。过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。主成分分析是我们在数学建模的过程中最为常见的线性降维方式,在比赛中常常会用在数据指标过多的处理,把高维度数据处理成低维度数据,方便后续建模。说人话就是将多个数据指标降维到较少的数据指标。


一、主成分分析的步骤

对n个样本,p个指标组成的Xnp的样本矩阵

1、对指标中心化

中心化也就是把数据的均值变为零
x i j = x i j − 1 n ∑ j = 1 n x i j (1) x_{ij}=x_{ij}-\frac{1}{n}\sum_{j=1}^n x_{ij} \tag{1} xij=xijn1j=1nxij(1)
数据是正态分布也可以是标准化过程。
x i j = X − X ‾ σ (2) x_{ij}= \frac{X-\overline{X}}{\sigma} \tag{2} xij=σXX(2)

2、计算协方差矩阵C

C = 1 n X ′ T X ′ (3) C= \frac{1}{n}X'^{T}X' \tag{3} C=n1XTX(3) C i j = c o v ( x i , x j ) = E ( ( x i − μ i ) ( x j − μ j ) ) (4) C_{ij}= cov(x_{i},x_{j})=E((x_{i}-\mu_{i})(x_{j}-\mu_{j})) \tag{4} Cij=cov(xi,xj)=E((xiμi)(xjμj))(4)
其中x为指标列,μ为指标均值

3、计算协方差矩阵的特征值和特征向量

C a = λ a (5) Ca=\lambda a \tag{5} Ca=λa(5)
λ为C的特征值,a为C的对应于特征值λ的特征向量,具体推导不会的可以参考线性代数。

4、计算主成分贡献率和累计贡献率

将特征值由大到小排列,对应的特征向量按行排列成矩阵a
P i = λ i ∑ λ i (6) P_{i}=\frac {\lambda_{i}}{\sum \lambda_{i}}\tag{6} Pi=λiλi(6)
P i ′ = ∑ k = 1 i P k (7) P'_{i}=\sum_{k=1}^i P_{k}\tag{7} Pi=k=1iPk(7)
Pi为贡献率,P’i为累计贡献率,我们将Pi视为信息的保留部分百分比

5、写出主成分

一般取累计贡献率P’i超过80%的特征值对应的m个主成分
Y = a X (8) Y=aX\tag{8} Y=aX(8)
第i个主成分: F i = a 1 i X 1 + a 2 i X 2 + … + a p i X p (9) F_{i}=a_{1i}X_{1}+a_{2i}X_{2}+…+a_{pi}X_{p}\tag{9} Fi=a1iX1+a2iX2++apiXp(9)

6、解释主成分

对于某个主成分而言,指标的系数越大,代表该指标对主成分的影响越大,我们对这个主成分的解释应赋予指标更大的权重。

二、代码程序

matlab代码如下:

clear;clc
x =  xlsread('文件路径\xxx.xlsx');  %导入excel数据
[n,p] = size(x);  % n是样本个数,p是指标个数
X=zscore(x); %matlab内置的标准化函数
C = cov(X); %求协方差矩阵
[V,lambda] = eig(C);  % V 特征向量矩阵,lamda为特征值构成的对角矩阵
[lambda, ind] = sort(diag(lambda), 'descend'); %排序
lambda=lambda./sum(lambda); %求贡献率
lambda=cumsum(lambda); %累计贡献率
k=find(lambda>0.9); %累计贡献率超过0.9
y=x*V(:,ind(1:k(1))); %y为主成分降维后的结果

python代码如下:

## pca特征降维
# 导入相关模块
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from numpy.linalg import eig
from sklearn.datasets import load_iris

iris = load_iris() # 导入矩阵,行是样本,列是指标
#X = np.array([[5.1, 3.5, 1.4, 0.2],
#                [4.9, 3, 1.4, 0.2]])
#自己导入矩阵数据可以用上面的注释代码,然后把X = iris.data 删掉即可
X = iris.data
# Standardize by remove average通过去除平均值进行标准化
X = X - X.mean(axis=0)

# Calculate covariance matrix:计算协方差矩阵:
X_cov = np.cov(X.T, ddof=0)

# Calculate  eigenvalues and eigenvectors of covariance matrix
# 计算协方差矩阵的特征值和特征向量
eigenvalues, eigenvectors = eig(X_cov)
pi = eigenvalues/np.sum(eigenvalues) #计算贡献率
p = np.cumsum(pi) #计算累计贡献率

k=np.min(np.argwhere(p > 0.95))+1 #返回达到累计贡献率的阈值的下标

# top k large eigenvectors选取前k个特征向量
klarge_index = eigenvalues.argsort()[-k:][::-1]
k_eigenvectors = eigenvectors[klarge_index]

# X和k个特征向量进行点乘
X_pca = np.dot(X, k_eigenvectors.T)
print(X_pca) #输出主成分结果

两种编程语言都是一样的,看自己熟练哪一种就用哪种。


总结`

主成分分析有没有不用代码的操作?
  是有的,spsspro、MPai数据科学平台等都有内置的主成分分析的操作。

如何解释主成分?
  在实际过程操作中,我们知道了第i个主成分的构成,那么可以根据相对应的系数进行解释,如:X1代表食品支出,X2代表住房支出,X3代表娱乐支出,X4代表医疗支出,Y1为第1个主成分,构成如下:
F i = 0.91 X 1 + 0.83 X 2 + 0.04 X 2 + 0.76 X 4 (10) F_{i}=0.91X_{1}+0.83X_{2}+0.04X_{2}+0.76X_{4}\tag{10} Fi=0.91X1+0.83X2+0.04X2+0.76X4(10)
  可以明显观察到,X1、X2、X4前面的系数较高,对于主成分的影响较大,而X3前面的系数较高,对于主成分的影响较小,那么我们可以将第一主成分解释为:家庭必要支出
注:一旦主成分无法解释,那么这次主成分分析就是失败的,可以考虑用因子分析

主成分分析能否用于综合评价?
  先说结论,主成分分析虽然有主成分得分,但是我们一般是不会将主成分分析用于综合得分评价的。因为主成分是会损失部分原始数据的信息的,而且如果指标是极小型的,在其中我们没有对数据指标进行正向化的过程,那么得分结果是不准确的。
  主成分得分的原理是从几十个指标中分解出几个主元,相当于是全新的指标,并且有这几个主元的贡献率,贡献率衡量的是这个主元能够反映整体多少信息量(其他指标映射到主元的距离方差,方差越大,说明能反映的信息量越多),是个相对性的值,归一化后可以当做权重,权重与主元相乘可得到不同样本相对的数值。文章来源地址https://www.toymoban.com/news/detail-400780.html

到了这里,关于主成分分析(PCA)步骤及代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【语音识别】基于主成分分析PCA结合最近邻KNN实现声音自动分类附matlab代码

     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab完整代码及仿真定制内容点击👇 智能优化算法       神经网络预测       雷达通信       无

    2024年04月27日
    浏览(70)
  • PCA分析(主成分分析)--结果解读

    主成分分析( PCA )是一个很好的工具,可以用来降低特征空间的维数。 PCA 的显著优点是它能产生不相关的特征,并能提高模型的性能。 PCA 用于减少用于训练模型的特征维度数量,它通过从多个特征构造所谓的主成分( PC )来实现这一点。 PC 的构造方式使得 PC1 方向在最大

    2024年02月03日
    浏览(37)
  • PCA主成分分析

    目前图像特征的提取主要有两种方法:传统图像特征提取方法 和 深度学习方法。 传统的特征提取方法:基于图像本身的特征进行提取(PCA); 深度学习方法:基于样本自动训练出区分图像的特征分类器; 特征选择(feature selection)和特征提取(Feature extraction)都属于 降维

    2024年02月08日
    浏览(54)
  • 主成分分析(PCA)详解

    主成分分析(PCA)是一种比较基础的数据降维方法,也是多元统计中的重要部分,在数据分析、机器学习等方面具有广泛应用。主成分分析目的是用较少的变量来代替原来较多的变量,并可以反映原来多个变量的大部分信息。 对于一个含有n个数据,变量的个数为p的一个样本,

    2024年01月17日
    浏览(45)
  • 主成分分析(PCA)原理详解

    在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律。多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的工作量。更重要的是在很多情形下,许多变量之间可能存在相关性,从而

    2024年02月07日
    浏览(46)
  • 主成分分析(PCA)实例讲解

        主成分分析(PCA)是一种降维算法,PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分(特征之间互相独立),是在原有n维特征的基础上重新构造出来的k维特征(k=n),会带来部分信息损失。     一般来说,当研究的问题涉及到多

    2024年02月09日
    浏览(45)
  • 主成分分析(PCA)——矩阵角度推导

    最近机器学习课上正式讲了主成分分析,只是老师说的很快,我并没有完全理解。随后我搜了很多关于这方面的讲解来进行理解,仅CSDN上就有很多讲的很好的文章,从协方差矩阵角度进行说明,基本上我也都理解了。但另一方面我发现可以结合我最近学的矩阵分析,从纯矩阵

    2024年03月15日
    浏览(36)
  • 【主成分分析(PCA)- 鸢尾花】

    在现代数据科学中,维度灾难常常是数据处理与分析的一大难题。主成分分析(PCA)是一种广泛使用的数据降维技术,它通过将原始数据转换为新的低维空间,保留最重要的信息,从而使得数据分析更加高效。本博客将详细介绍PCA的原理、应用场景以及如何使用Python中的skl

    2024年02月15日
    浏览(77)
  • 【数据处理方法】主成分分析(PCA)原理分析

            笔者最近在学习的过程需要使用一些数据分析和处理的方法,而PCA就是其中常用的一种手段。但在自学的过程中,由于笔者水平有限,对一些博客中的公式不是能很好理解(数学不好的辛酸Ծ‸Ծ),导致总是对整个方法的原理没有一个透彻的理解。后来在视频用

    2023年04月09日
    浏览(40)
  • 主成分分析(PCA)及python原理实现

    该定义来自于秒懂百科:          PCA(principal components analysis)即主成分分析技术,又称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。         在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包