【数模】主成分分析PCA

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

一、主成分分析的简要介绍

1.1 降维

  • 主成分分析:把原来多个变量划为少数几个综合指标的一种统计分析方法 → 降维
  • 降维的优点:
    • 使得数据集更易使用;
    • 降低算法的计算开销;
    • 去除噪声;
    • 使得结果容易理解。

1.2 PCA详细证明过程

  • 参考视频(需要基础:多元统计和线性代数)

二、PCA的计算步骤

假设有n个样本,p个指标,则可构成大小为n×p的样本矩阵x:在这里插入图片描述

2.1 标准化处理

在这里插入图片描述

2.2 计算标准化样本的协方差矩阵

在这里插入图片描述

( 2.1和2.2合并:直接计算x矩阵的样本相关系数矩阵 )

在这里插入图片描述

2.3 计算R的特征值和特征向量

  • 软件会算好,不必自己算,Matlab中计算特征值和特征向量的函数:eig(R)函数
  • R一定是半正定矩阵 → 则一定非负(线代知识)
    在这里插入图片描述

2.4 计算主成分贡献率以及累计贡献率

在这里插入图片描述

2.5 写出主成分

  • 一般取累计贡献率超过80%的特征值所对应的第一、第二、… 、第m(m≤p)个主成分。第i个主成分:F=a1iX1+ a2iX2+…十apiXp(i=1,2,…,m)

2.6 根据系数(api)分析主成分代表的意义

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

2.7 利用主成分的结果进行后续的分析

  1. 主成分得分:不能评价类模型!
  2. 主成分可用于聚类分析→方便画图
  3. 主成分可用于回归分析

三、主成分分析的应用例题1

3.1 题目

  • 在制定服装标准的过程中,对128名成年男子的身材进行了测量,每人测得的指标中含有这样六项:身高(x1)、坐高(x2) 、胸围(x3) 、手臂长(x4) 、肋围(x5)和腰围(x6) 。所得样本相关系数矩阵(对称矩阵)列于下表。
  • 注意:本题给我们的数据直接就是样本相关系数矩阵,一般建模时,得到的数据是最原始的数据(每一列是指标,每一行是样本)。在这里插入图片描述

3.2 计算关键变量

  • 经过计算,相关系数矩阵的特征值、相应的特征向量以及贡献率列于下表:在这里插入图片描述
  • 从表中可以看到前三个主成分的累计贡献率达85.9%,因此可以考虑只取前面三个主成分,它们能够很好地概括原始变量。

3.3 写出主成分并简要分析

在这里插入图片描述

  • 第一主成分F1对所有(标准化)原始变量都有近似相等的正载荷,故称第一主成分为(身材)大小成分。
  • 第二主成分F2在X3,X5,X6上有中等程度的正载荷,而在X1,X2,X4上有中等程度的负载荷,称第二主成分为形状成分(或胖瘦成分)。
  • 第三主成分F3在X2上有大的正载荷,在X4上有大的负载荷,而在其余变量上的载荷都较小,可称第三主成分为臂长成分。
  • 注:由于第三主成分的贡献率不高(7.65%)且实际意义也不太重要,因此我们也可以考虑只取前两个主成分进行分析。

3.4 主成分分析的说明

  • 在主成分分析中,我们首先应保证所提取的前几个主成分的累计贡献率达到一个较高的水平,其次对这些被提取的主成分必须都能够给出符合实际背景和意义的解释。
  • 主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。 因此,提取的主成分个数m通常应明显小于原始变量个数p(除非p本身较小),否则维数降低的“利”可能抵不过主成分含义不如原始变量清楚的“弊”。
  • 如果原始变量之间具有较高的相关性,则前面少数几个主成分的累计贡献率通常就能达到一个较高水平,也就是说,此时的累计贡献率通常较易得到满足。
  • 主成分分析的困难之处主要在于要能够给出主成分的较好解释,所提取的主成分中如有一个主成分解释不了,整个主成分分析也就失败了。
  • 主成分分析是变量降维的一种重要、常用的方法,简单的说,该方法要应用得成功,一是靠原始变量的合理选取,二是靠“运气”。
    ——参考教材:《应用多元统计分析》王学民

四、主成分分析的应用例题2

4.1 题目

在这里插入图片描述

4.2 计算关键变量

在这里插入图片描述

4.3 对主成分的简要分析

在这里插入图片描述
由上表可知,前两个主成分的累计贡献率已高达93.7%,第一主成分F1在所有变量上有几乎相等的正载荷,可称为在径赛项目上的强弱成分。第二主成分F2在各个指标上的载荷基本上逐个递减,反映了速度与耐力成绩的对比

4.4 Matlab代码

  • PCA.m(更加详细的代码注释可见源代码)
%% 第一步:对数据x标准化为X
X=zscore(x);

%% 第二步:计算样本协方差矩阵
R = cov(X);
%% 注意:以上两步可合并为下面一步:直接计算样本相关系数矩阵
R = corrcoef(x);

%% 第三步:计算R的特征值和特征向量
[V,D] = eig(R); % V 特征向量矩阵 D 特征值构成的对角矩阵

%% 第四步:计算主成分贡献率和累计贡献率
lambda = diag(D); % diag函数用于得到一个矩阵的主对角线元素值(返回的是列向量)
lambda = lambda(end:-1:1); % 因为lambda向量是从小大到排序的,我们将其调个头
% 计算贡献率
contribution_rate = lambda / sum(lambda);
% 计算累计贡献率 cumsum是求累加值的函数
cum_contribution_rate = cumsum(lambda)/ sum(lambda);
% 注意:这里的特征向量要和特征值一一对应,之前特征值相当于颠倒过来了,因此特征向量
的各列需要颠倒过来
% rot90函数可以使一个矩阵逆时针旋转90度,然后再转置,就可以实现将矩阵的列颠倒的效果
V=rot90(V)';
对相关系数R进行可视化
  • ①将R的数据复制到Excel表中,并设定行高为50在这里插入图片描述

  • ③色阶修改在这里插入图片描述

  • ④管理规则(颜色越深代表相关性越强)在这里插入图片描述

4.5 利用Matlab进行主成分分析

在这里插入图片描述

4.6 对结果的解释

在这里插入图片描述

从上表可以看出,前两个和前三个主成分的累计贡献率分别达到80.6%和87.8%,第一主成分F1在所有变量(除在x2上的载荷稍偏小外)上都有近似相等的正载荷,反映了综合消费性支出的水平,因此第一主成分可称为综合消费性支出成分。第二主成分F2在变量x2上有很高的正载荷,在变量x4上有中等的正载荷,而在其余变量上有负载荷或很小的正载荷。可以认为这个主成分度量了受地区气候影响的消费性支出(主要是衣着 ,其次是医疗保健 )在所有消费性支出中占的比重(也可理解为一种消费倾向),第二主成分可称为消费倾向成分。第三主成分很难给出明显的解释,因此我们只取前面两个主成分。


五、主成分分析的滥用:主成分得分

  • ①王学民老师在这里插入图片描述

  • ②清风老师的补充

    • 主成分是降维算法,既然已经有数据了,为什么不把这些数据的信息全部用上呢?主成分分析是会损失原始数据的信息的。
    • 指标可能有各种类型(极大、极小、区间等),主成分只有标准化的过程,并没有正向化的过程。
  • 滥用的例子:在这里插入图片描述


六、主成分分析用于聚类

  • Matlab生成结果复制进spss中
    在这里插入图片描述

  • 查看能大概分成几类:如下为3类在这里插入图片描述

    • 主成分和之前聚类模型对比生成的聚类结果:在这里插入图片描述
  • 生成聚类效果图在这里插入图片描述
    在这里插入图片描述

  • 聚类效果图:主成分聚类最大的意义就是可视化最后的聚类效果,毕竟使用主成分是会降低部分信息的。(只有在指标个数特别多,且指标之间存在很强的相关性时才用主成分聚类。)在这里插入图片描述


七、主成分回归

  • 主成分回归可用来解决多重共线性的问题。

7.1 例题:探究棉花单产和五个指标之间的关系在这里插入图片描述

7.2 主成分的解释

在这里插入图片描述

  • 从表中可以看出,前两个主成分的累计贡献率为97.74%,第一主成分F1在所有变量(除在x3上的载荷稍偏小外)上都有近似相等的正载荷,反映了在种植投入上较为综合的水平,因此第一主成分可称为综合投入成分。第二主成分F2在变量x3(农药)上有很高的负载荷,在变量x2上有较低的负载荷,而在其余变量上均为正载荷。可以认为这个主成分度量了受土壤环境影响的投入(主要是农药 ,其次是机械费用 )在所有投入中占的比重。

7.3 在Stata中回归结果

  • Stata回归代码:reg Y F1 F2
  • Stata异方差检验代码:estat imtest,white
  • 最重要解释回归系数,因为都是显著的
    在这里插入图片描述

八、思考

  • 问题1:之前学过逐步回归,逐步回归也可以用来解决多重共线性问题,该用逐步回归还是今天学习的主成分分析呢?
    • 如果能够很好的解释清楚主成分代表的含义,那么建议在正文中既用主成分分析,又用逐步回归(多分析点没啥坏处,只要你能保证你不分析错就行);如果解释不清楚,还是用逐步回归。
  • 问题2:主成分回归后,需要将原来的变量带回到回归方程吗?
    • 没必要。因为要是代回去了,和普通的回归没什么区别。主成分的核心作用就是降维,代回去了维度也没降。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/842363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解Quest 2积分与奖励规则

7月28日,在万众期待中,Mysten Labs在Quest门户网站上宣布了Quest 2的到来。经过严密的筹划,本着真实、公平以及用户至上的原则,现在向大家介绍Quest 2的积分规则以及奖励规则。 温馨提示:第一轮Bullshark Quest是一次精…

SpringBoot+Vue实现软件工程课程在线考试系统

博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

利用appium抓取app中的信息

一、appium简介 二、appium环境安装 三、联调测试环境 四、利用appium自动控制移动设备并提取数据

mysql转sqlite3

在项目中需要将mysql迁移到sqlite3中,此时需要作数据转换 准备工作 下载mysql2sqlite转换工具 https://github.com/dumblob/mysql2sqlite/archive/refs/heads/master.zip 下载sqlite3 https://www.sqlite.org/download.html 转换 命令行中输入如下命令 1、cd …

6.6 实现卷积神经网络LeNet训练并预测手写体数字

模型架构 代码实现 import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(nn.Conv2d(1,6,kernel_size5,padding2),nn.Sigmoid(),#padding2补偿5x5卷积核导致的特征减少。nn.AvgPool2d(kernel_size2,stride2),nn.Conv2d(6,16,kernel_size5),nn.S…

[疑难杂症2023-007]multiprocessing.Process使用时遇到的几个棘手问题

本文由Markdown编辑器编辑完成。 1. 背景 近日,为了解决自己负责的一个组件,在处理大量数据时,由于内存释放不及时,而导致整个组件占用了较高的内存。 这主要是因为目前我们在使用python的一个采用多进程的框架——Celery. 关于…

解决Map修改key的问题

需求 现在返回json数据带有分页的数据,将返回data属性数据变更为content,数据不变,key发生变化 实现1,源数据比较复杂,组装数据比较麻烦 说明:如果使用这种方式完成需求,需要创建对象&#xff0…

搭建简易syslog日志中转服务器

在某种场景下,无法接入日志审计设备,本文提供一种方式,可通过搭建简易日志中转服务器,收集到该环境下的日志后,再将其导入日志审计设备中。 0x1 开启服务 rsyslog守护进程来自于当前的linux发布版本的预装模块&#x…

【vue】vue基础知识

1、插值表达式&属性绑定 <!--template展示给用户&#xff0c;相当于MVVM模式中的V--> <template><div class"first_div">//插值表达式<p>{{ message }}</p>//这里的参数是从父组件的template里传过来的<p>{{data_1}}</p…

SIP协议之呼叫保持(HOLD)

呼叫保持(HOLD)是SIP协议应用中的一个重要功能&#xff0c;用于实现不挂断电话而达到暂停媒体&#xff08;常见于音频&#xff0c;视频很少用&#xff09;的目的&#xff0c;而解保持操作会恢复通话。 一、保持/解保持实现机制 1.1 保持 保持发起方&#xff08;保持方&#x…

Flutter 自定义view

带进度动画的圆环。没gif&#xff0c;效果大家自行脑补。 继承CustomPainter&#xff0c;paint()方法中拿到canvas&#xff0c;绘制API和android差不多。 import package:flutter/material.dart;class ProgressRingPainter extends CustomPainter {double strokeWidth 20;Col…

2023应急指挥系统总体架构方案 PPT

导读&#xff1a;原文《应急指挥系统总体架构方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完整的电…

如何找到死锁的线程?_java都学什么

在Java中&#xff0c;死锁是指两个或多个线程被无限地阻塞&#xff0c;等待彼此持有的资源&#xff0c;从而导致程序无法继续执行的情况。死锁通常是由于线程之间循环等待资源而产生的。要找到死锁的线程&#xff0c;可以采用以下方法&#xff1a; 1.线程转储(Thread Dump) 通过…

【Vant Weapp】van-icon 图标

<van-icon name"play-circle" color"rgba(255,255,255,.6)" size"40"/>

关于策略模式的注入问题

上面抄别人的 当在实现策略方法时&#xff0c;报null&#xff0c;排查后发现是接口实现有多个&#xff0c;需要添加别名 注入时添加Qeualifier&#xff0c;指定名称&#xff0c;如下图&#xff1b;如图上修改&#xff0c; 测试类中不用new具体行为策略了&#xff0c;注入别名即…

OpenStreetMap数据转3D场景【Python + PostgreSQL】

很长一段时间以来&#xff0c;我对 GIS 和渲染感兴趣&#xff0c;在分别尝试这两者之后&#xff0c;我决定最终尝试以 3D 方式渲染 OpenStreetMap 中的地理数据&#xff0c;重点关注不超过城市的小规模。 在本文中&#xff0c;我将介绍从建筑形状生成三角形网格、以适合 Blend…

认识Vue;vue使用和安装;声明式和命令式编程;MVVM模型;data属性;methods属性

目录 1_认识Vue2_vue使用和安装3_声明式和命令式编程4_MVVM模型5_data属性6_methods属性 1_认识Vue Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式 JavaScript框架。 全称是Vue.js或者Vuejs&#xff1b; 它基于标准 HTML、CSS 和 JavaScript 构建…

SpringBoot开发环境热部署

目录 开发热部署 添加dev-tools依赖 在application.properties中配置devtools 在IDEA中添加设置 开发热部署 在实际的项目开发调试过程中会频繁地修改后台类文件&#xff0c;导致需要重新编译、 重新启动&#xff0c;整个过程非常麻烦&#xff0c;影响开发…

密码攻击与ADSelfService Plus的保护

密码攻击是当前网络安全面临的严峻挑战之一。黑客通过不断演进的技术手段&#xff0c;试图入侵用户账户&#xff0c;窃取敏感信息&#xff0c;从而对个人和组织造成严重损害。为了应对密码攻击的威胁&#xff0c;ManageEngine推出了ADSelfService Plus&#xff0c;这是一款功能…

【数据结构】链表(一)

链表&#xff08;一&#xff09; 文章目录 链表&#xff08;一&#xff09;01 引入02 概念及结构03 单向不带头不循环链表实现3.1 创建节点类型3.2 简易创建一个链表3.3 遍历链表每个节点3.4 获取链表长度3.5 查找是否包含关键字key是否在单链表当中3.6 头插法3.7 尾插法3.8 任…