主成分分析(PCA)步骤及代码
主成成分分析
前言
主成分分析(Principal Component Analysis,PCA), 简称PCA,是一种统计方法。过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。主成分分析是我们在数学建模的过程中最为常见的线性降维方式,在比赛中常常会用在数据指标过多的处理,把高维度数据处理成低维度数据,方便后续建模。说人话就是将多个数据指标降维到较少的数据指标。
一、主成分分析的步骤
对n个样本,p个指标组成的Xnp的样本矩阵
1、对指标中心化
中心化也就是把数据的均值变为零
xij=xij−1n∑j=1nxij(1)x_{ij}=x_{ij}-\frac{1}{n}\sum_{j=1}^n x_{ij} \tag{1} xij=xij−n1j=1∑nxij(1)
数据是正态分布也可以是标准化过程。
xij=X−X‾σ(2)x_{ij}= \frac{X-\overline{X}}{\sigma} \tag{2} xij=σX−X(2)
2、计算协方差矩阵C
C=1nX′TX′(3)C= \frac{1}{n}X'^{T}X' \tag{3} C=n1X′TX′(3)Cij=cov(xi,xj)=E((xi−μi)(xj−μ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、计算协方差矩阵的特征值和特征向量
Ca=λa(5)Ca=\lambda a \tag{5}Ca=λa(5)
λ为C的特征值,a为C的对应于特征值λ的特征向量,具体推导不会的可以参考线性代数。
4、计算主成分贡献率和累计贡献率
将特征值由大到小排列,对应的特征向量按行排列成矩阵a
Pi=λi∑λi(6)P_{i}=\frac {\lambda_{i}}{\sum \lambda_{i}}\tag{6}Pi=∑λiλi(6)
Pi′=∑k=1iPk(7)P'_{i}=\sum_{k=1}^i P_{k}\tag{7}Pi′=k=1∑iPk(7)
Pi为贡献率,P’i为累计贡献率,我们将Pi视为信息的保留部分百分比
5、写出主成分
一般取累计贡献率P’i超过80%的特征值对应的m个主成分
Y=aX(8)Y=aX\tag{8}Y=aX(8)
第i个主成分:Fi=a1iX1+a2iX2+…+apiXp(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_irisiris = 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个主成分,构成如下:
Fi=0.91X1+0.83X2+0.04X2+0.76X4(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前面的系数较高,对于主成分的影响较小,那么我们可以将第一主成分解释为:家庭必要支出
注:一旦主成分无法解释,那么这次主成分分析就是失败的,可以考虑用因子分析
主成分分析能否用于综合评价?
先说结论,主成分分析虽然有主成分得分,但是我们一般是不会将主成分分析用于综合得分评价的。因为主成分是会损失部分原始数据的信息的,而且如果指标是极小型的,在其中我们没有对数据指标进行正向化的过程,那么得分结果是不准确的。
主成分得分的原理是从几十个指标中分解出几个主元,相当于是全新的指标,并且有这几个主元的贡献率,贡献率衡量的是这个主元能够反映整体多少信息量(其他指标映射到主元的距离方差,方差越大,说明能反映的信息量越多),是个相对性的值,归一化后可以当做权重,权重与主元相乘可得到不同样本相对的数值。
主成分分析(PCA)步骤及代码相关推荐
- sklearn主成分分析PCA
sklearn主成分分析PCA 菜菜的sklearn学习笔记 文章目录 sklearn主成分分析PCA 数学原理 代码 导入包 导入数据 核心代码 查看降维后所带有的信息量大小 可视化 扩展 累计方差 ...
- 主成分分析(PCA)方法步骤以及代码详解
主成分分析(PCA)方法步骤以及代码详解 前言 上一节我们了解到在构建神经网络模型,除了掌握如何搭建神经网络架构,了解参数具体含义,规避风险等方法.第一步是要对采用数据集的详细了解,无需接触任何神经网 ...
- PCA(主成分分析)获取BoundingBox代码分析
引言 最近要用到PCA获取目标点云的BoundingBox,但是网上给出的有关PCA的代码大都太简洁了,我觉得可能是大佬觉得比较简单,没有详细描述.这里记录一下自己的探究结果,方便大家理解.欢迎留言讨 ...
- 假期作业二:主成分分析:步骤、应用及代码实现。代码可以用任何你熟悉的编程语言。
第二次作业:主成分分析:步骤.应用及代码实现.代码可以用任何你熟悉的编程语言. 主成分分析: 一.基本概念和相关理解: 1.基本概念 在用统计方法研究多变量的课题时,变量个数太多就会增加课题的复杂性. ...
- 223.主成分分析PCA
主成分分析 PCA 本节作者:刘华,中国科学技术大学 版本1.0.3,更新日期:2020年6月18日 什么是PCA(Principal Component Analysis) 相关背景 在许多领域的研 ...
- 机器学习-降维之主成分分析PCA算法原理及实战
主成分分析 前言 近年来,随着互联网和信息行业的发展,数据已经渗透到各行各业,成为重要的生产因素如数据记录和属性规模的急剧增长.社会已经进入大数据时代,数据越多越好似乎已经成为公理.然而,数据量并不是 ...
- 送书 | 主成分分析PCA
主成分分析 PCA 本节作者:刘华,中国科学技术大学 版本1.0.3,更新日期:2020年6月18日 什么是PCA(Principal Component Analysis) 相关背景 在许多领域的研 ...
- 数学建模-14.主成分分析PCA
主成分分析(PCA) 一种降维算法,能将多个指标转换为少数几个主成分 这些主成分是原始变量的线性组合,且彼此互不相关.其能反映出原始数据的大部分信息. 一般而言,当研究问题涉及到多变量且变量之间存在很 ...
- 【图像融合】主成分分析PCA
基本原理 主成分分析PCA 是采取一种数学降维的方法,找出几个综合变量来代替原来众多的变量,使这些综合变量能尽可能地代表原来变量的信息量,而且彼此之间互不相关.在新的综合变量基础上,可以进一步统计 ...
- 主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?
这是从网上看到的PCA算法的步骤: 第一步,分别求每列的平均值,然后对于所有的样例,都减去对应的均值. 第二步,求特征协方差矩阵. 第三步,求协方差的特征值-显示全部 关注者 1,218 被浏览 78 ...
最新文章
- Install 802.1x In Fedora
- VisualSVN安装配置与使用
- MVC全局用户验证之HttpModule
- imageloader 的 java.security.cert.CertPathValidatorException
- 1.7 空间正交分解
- rar x64 5.50 linux,WinRAR 5.50 简体中文正式版发布
- 对速度的需求,访问现有数据的速度提高了1000倍
- Jeston TX2安装Ubuntu系统
- jmeter 响应结果分析一
- SpringCloud(二) 生产者、消费者工程搭建与调用(上)
- 用html语言制作古诗网页,唐诗宋词网页设计.docx
- 【Elasticsearch】java 客户端 获取 termvectors 词频 统计
- python中for语句只有一种写法for in_pythonforin语句
- X264源码下载地址
- 7-2 前n项的和2 (10 分)
- 基于SSH开发的校园一卡通管理系统
- nginx ajax 504,内网配置错误引起的nginx 504 Connection timed out
- stm32视频教程分享:心率检测仪的设计与实现
- Win11删除资源管理器中的图片、文档等文件夹
- 【解禁】钉钉直播回放下载
热门文章
- C# Socket简单例子(服务器与客户端通信)【转】
- coreldraw x8里线段显示尺寸_cdr工具使用技巧与方法,教你CorelDRAW X8图框精确剪裁使用方法...
- matlab读取sgy格式文件的m文件,matlab读取segy格式的文件
- 扬州大学复试1301软件工程【自制题库个人复习用】
- b站的服务器在哪个文件夹,b站缓存的视频在哪个文件 具体操作步骤
- 雷电模拟器命令操作合集
- flink 容错机制(检查点的保存、恢复、检查点算法、保存点、状态一致性的三种级别、end-to-end exactly-once)
- 随机抽样、分层抽样、整群抽样、系统抽样的区别
- RFC4568规范:SDP协商SRTP密钥
- 『码上行动-编程擂台』学员作品展(附源码)