当前位置: 首页 > news >正文

【数学建模】--主成分分析

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

将多个指标转换为少数几个主成分

问题的提出:

对于变量多,分析时难度大=>因此用较少新变量代替原来较多就变量。

数据降维的作用:

 

主成分分析的思想:

 

 

严谨的数学符号:

 

 

PCA的计算步骤(理论步骤):

 

 

 

 

 

案列1

 

计算关键变量:

一般看累积贡献率,一般选择累积贡献率较大且所选变量少时情况。如下图的累积贡献率到第三个时已经为85.9%,后面的已经相对增加的趋势较少说明后面变量的贡献率相对较少可以不用考虑。

 

 

写出主成分并简要分析:

 

主成分分析的说明:

 

案例2:

 

计算关键变量:

 

对主成分分析:

 

主成分分析的MATLAB代码实现:

 

  1. 标准化数据。利用函数zscore(数据)
  2. 计算标准化后样本的协方差。函数cov(标准化后数据)

补:在我们进行完1,2步后得到了样本相关系数矩阵,可对其相关系数进行可视化。

步骤:

a.复制相关系数矩阵->excel,调整表格的行高列宽。

b.色阶->三色表->管理规则->编辑规则->修改数字,范围->应用。

 

 

让我们继续回到matlab的操作:

3.根据PCA计算步骤,接下来计算R(相关系数矩阵)的特征值和特征向量。函数eig(R)。若eig不给返参数,默认只返回特征值。

 

4.计算主成分贡献率和累积贡献率。(计算过程复杂,后期会有代码和注释的补充)

5.根据累积贡献率选择主成分变量的个数,并且进行主成分变量的计算。

 

6.根据实际问题选择,如果为聚类模型则将数据复制到excel,再用spss解决;如果为主成分回归,则还需要计算标准化y值(利用函数zscore),再将得到的标准化y和主成分变量F1,F2……Fm复制到excel再导入到stata中进行分析。

Matlab进行主成分分析:

 

结果的解释:

 

主成分分析的滥用(了解):

 

对于聚类问题的主成分分析的使用:

 

 

将数据有导入spss中再进行聚类:

(关于聚类模型可以参考博主之前的一篇文章:【数学建模】--聚类模型_Wei&Yan的博客-CSDN博客)

分析-分类-系统聚类-导入重要变量-图-普系图-生成谱系图后根据普系图确定类的个数。

 

 

确定类的个数后再重新运行生成散点图:

(在确定类的个数后要手动输入)

 

 

 

Spss聚类:

 

效果图:

 

主成分回归:

 

 

利用Stata来解决主成分回归:

 

关于主成分回归的看法:

 

课后作业:

 

 

 如果不了解多元回归和stata的应用可参考博主的:数学建模—多元线性回归分析(+lasso回归的操作)_Wei&Yan的博客-CSDN博客

  1. 直接回归,并用异方差(estat imtest,white)和多重共线性检验(estat vif):

 

 

 

2.逐步回归分析(向后逐步):

3.主成分分析:

 

观察到前两项的累积贡献率已经较高,所以选择前两项为主成分自变量,得到了标准化后的主成分自变量F1,F2和Y。

将数据导出到excel再导入stata进行分析:

 

 

 Stata运行结果:

 MATLAB代码参考:

 

clear;clc% 主成分聚类% 主成分回归
load data3.mat%博主在作业测试中的数据。
% 注意,这里可以对数据先进行描述性统计
% 描述性统计的内容见第5讲.相关系数
[n,p] = size(x);  % n是样本个数,p是指标个数%% 第一步:对数据x标准化为X
X=zscore(x);   % matlab内置的标准化函数(x-mean(x))/std(x)%% 第二步:计算样本协方差矩阵
R = cov(X);%% 注意:以上两步可合并为下面一步:直接计算样本相关系数矩阵
R = corrcoef(x);
disp('样本相关系数矩阵为:')
disp(R)%% 第三步:计算R的特征值和特征向量
% 注意:R是半正定矩阵,所以其特征值不为负数
% R同时是对称矩阵,Matlab计算对称矩阵时,会将特征值按照从小到大排列哦
% eig函数的详解见第一讲层次分析法的视频
[V,D] = eig(R);  % V 特征向量矩阵  D 特征值构成的对角矩阵%% 第四步:计算主成分贡献率和累计贡献率
lambda = diag(D);  % diag函数用于得到一个矩阵的主对角线元素值(返回的是列向量)
lambda = lambda(end:-1:1);  % 因为lambda向量是从小大到排序的,我们将其调个头
contribution_rate = lambda / sum(lambda);  % 计算贡献率
cum_contribution_rate = cumsum(lambda)/ sum(lambda);   % 计算累计贡献率  cumsum是求累加值的函数
disp('特征值为:')
disp(lambda')  % 转置为行向量,方便展示
disp('贡献率为:')
disp(contribution_rate')
disp('累计贡献率为:')
disp(cum_contribution_rate')
disp('与特征值对应的特征向量矩阵为:')
% 注意:这里的特征向量要和特征值一一对应,之前特征值相当于颠倒过来了,因此特征向量的各列需要颠倒过来
%  rot90函数可以使一个矩阵逆时针旋转90度,然后再转置,就可以实现将矩阵的列颠倒的效果
V=rot90(V)';
disp(V)%% 计算我们所需要的主成分的值
m =input('请输入需要保存的主成分的个数:  ');
F = zeros(n,m);  %初始化保存主成分的矩阵(每一列是一个主成分)
for i = 1:mai = V(:,i)';   % 将第i个特征向量取出,并转置为行向量Ai = repmat(ai,n,1);   % 将这个行向量重复n次,构成一个n*p的矩阵F(:, i) = sum(Ai .* X, 2);  % 注意,对标准化的数据求了权重后要计算每一行的和
end%% (1)主成分聚类 : 将主成分指标所在的F矩阵复制到Excel表格,然后再用Spss进行聚类
% 在Excel第一行输入指标名称(F1,F2, ..., Fm)
% 双击Matlab工作区的F,进入变量编辑中,然后复制里面的数据到Excel表格
% 导出数据之后,我们后续的分析就可以在Spss中进行。%%(2)主成分回归:将x使用主成分得到主成分指标,并将y标准化,接着导出到Excel,然后再使用Stata回归
%Y = zscore(y);  % 一定要将y进行标准化哦~
% 在Excel第一行输入指标名称(Y,F1, F2, ..., Fm)
% 分别双击Matlab工作区的Y和F,进入变量编辑中,然后复制里面的数据到Excel表格
% 导出数据之后,我们后续的分析就可以在Stata中进行。

相关文章:

【数学建模】--主成分分析

本讲将介绍主成分分析(Principal Component Analysis,PCA),主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能…...

gitee(码云)如何生成并添加公钥,以及配置用户信息

一,简介 在使用Gitee的时候,公钥是必须的,无论是克隆还是上传。本文主要介绍如何本地生成和添加公钥到服务器,然后配置自己的用户信息,方便日后拉取与上传代码。 二,步骤介绍 2.1 本地生成公钥 打开git ba…...

wangeditor上传图片并展示在输入框内方法(vue3)

安装vue3组件 yarn add @wangeditor/editor-for-vue@next # 或者 npm install @wangeditor/editor-for-vue@next --save 页面中创建一个新的组件 <template><div style="border: 1px solid #ccc; text-align: left"><Toolbar style="border-…...

UGUI基础游戏对象Canvas

一.画布Canvas对象概述 画布是一种带有画布组件的游戏对象&#xff0c;所有 UI 元素都必须是此类画布的子项。 创建新的 UI 元素&#xff08;如使用菜单 GameObject > UI > Image 创建图像&#xff09;时&#xff0c;如果场景中还没有画布&#xff0c;则会自动创建画布。…...

PK Nounique CASCADE DROP INDEX keep index

Explicit Control Over Indexes when Creating, Disabling, or Dropping PK/Unique Constraints (Doc ID 139666.1)​编辑To Bottom PURPOSEIn Oracle 9i, the DBA has an explicit control over how indexes are affectedwhile creating, disabling, or dropping Primary Ke…...

【Antd】实现Table组件行点击,解决某一列不触发行点击

今天有个新需求&#xff0c;点击table行&#xff0c;执行一些操作。实现过程中遇到了&#xff1a;点击操作列、操作列内按钮会冒泡触发行点击。antd版本&#xff1a;1.7.8 一、解决方案 customRow <a-table :customRow"handleClickRow" :data-source"data_li…...

Kafka3.0.0版本——Broker( 退役旧节点)示例

目录 一、服务器信息二、先启动4台zookeeper&#xff0c;再启动4台kafka三、通过PrettyZoo工具验证启动的kafka是否ok四、查看4台kafka集群节点上是否存在创建的名称为news的主题五、退役旧节点5.1、执行负载均衡操作5.2、 执行停止命令5.3、再次查看kafka中的创建过的名称为ne…...

【Rust】Rust学习 第十二章一个 I/O 项目:构建一个命令行程序

本章既是一个目前所学的很多技能的概括&#xff0c;也是一个更多标准库功能的探索。我们将构建一个与文件和命令行输入/输出交互的命令行工具来练习现在一些你已经掌握的 Rust 技能。 Rust 的运行速度、安全性、单二进制文件输出和跨平台支持使其成为创建命令行程序的绝佳选择…...

【MySQL--->表的操作】

文章目录 [TOC](文章目录) 一、创建表二、查看表三、修改表四、删除表drop table 表名; ![在这里插入图片描述](https://img-blog.csdnimg.cn/15227b8335364d41bd01b4b4dd83ee55.png) 一、创建表 语句格式:create table 表名(列名 类型,…)字符集 校验规则 存储引擎;字符集和校…...

PyTorch从零开始实现ResNet

文章目录 代码实现参考 代码实现 本文实现 ResNet原论文 Deep Residual Learning for Image Recognition 中的50层&#xff0c;101层和152层残差连接。 代码中使用基础残差块这个概念&#xff0c;这里的基础残差块指的是上图中红色矩形圈出的内容&#xff1a;从上到下分别使用…...

企业微信 企业内部开发 学习笔记

官方文档 文档 术语介绍 引入pom <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-cp-spring-boot-starter</artifactId><version>4.5.3.B</version></dependency>核心代码 推送消息 final WxCp…...

03 QT基本控件和功能类

一 进度条 、水平滑动条 垂直滑动条 当在QT中,在已知类名的情况下,要了解类的构造函数 常用属性 及 信号和槽 常用api 特征:可以获取当前控件的值和设置它的当值 ---- int ui->progressBar->setValue(value); //给进度条设置一个整型值 ui->progressBar->value…...

epoll数据结构

目录 1.大量的fd 集合。选择什么数据结构&#xff1f;2、Epoll 数据结构Epitem 的定义Eventpoll 的定义 1.大量的fd 集合。选择什么数据结构&#xff1f; 查找频率很高的数据结构 1.红黑树 2.哈希&#xff08;扩容缩容&#xff09; 3. b/btree &#xff08;降低树的高度&#…...

LINUX学习笔记_GIT操作命令

LINUX学习笔记 GIT操作命令 基本命令 git init&#xff1a;初始化仓库git status&#xff1a;查看文件状态git add&#xff1a;添加文件到暂存区&#xff08;index&#xff09;git commit -m “注释”&#xff1a;提交文件到仓库&#xff08;repository&#xff09;git log&a…...

第一百二十九天学习记录:数据结构与算法基础:栈和队列(中)(王卓教学视频)

栈的表示和实现 顺序栈的初始化 ##入栈 链栈的表示...

C语言 — qsort 函数

介绍&#xff1a;qsort是一个库函数&#xff0c;用来对数据进行排序&#xff0c;可以排序任意类型的数据。 void qsort &#xff08;void*base&#xff0c; size_t num, size_t size, int(*compart)(const void*,constvoid*) &#xff09; qsort 具有四个参数&#xff1a; …...

开放式耳机哪个好一点?推荐几款优秀的开放式耳机

在追求更广阔的音场和更真实的音质时&#xff0c;开放式耳机是绝对值得考虑的选择。它们以其通透感和自然的音质而备受推崇&#xff0c;带来更逼真的音乐体验。下面我来推荐几款优秀的开放式耳机&#xff0c;满足你对音质和舒适度的要求&#xff0c;可尽情享受音乐的魅力。 一…...

vue-cli前端工程化——创建vue-cli工程 router版本的创建 目录结构 案例初步

目录 引出创建vue-cli前端工程vue-cli是什么自动构建创建vue-cli项目选择Vue的版本号 手动安装进行选择创建成功 手动创建router版多了一个router 运行测试bug解决 Vue项目结构main.jspackage.jsonvue.config.js Vue项目初步hello案例 总结 引出 1.vue-cli是啥&#xff0c;创建…...

Go和Java实现外观模式

Go和Java实现外观模式 下面我们通过一个构造各种形状的案例来说明外观模式的使用。 1、外观模式 外观模式隐藏系统的复杂性&#xff0c;并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型 模式&#xff0c;它向现有的系统添加一个接口&#xff…...

人工智能(一)基本概念

人工智能之基本概念 常见问题什么是人工智能&#xff1f;人工智能应用在那些地方&#xff1f;人工智能的三种形态图灵测试是啥&#xff1f;人工智能、机器学习和深度学习之间是什么关系&#xff1f;为什么人工智能计算会用到GPU&#xff1f; 机器学习什么是机器学习&#xff1f…...

# 大数据开发面试题库

大数据开发岗面试必备&#xff1a;SQL 高频题、Spark 性能调优、数仓建模实战、项目经验梳理&#xff0c;覆盖初中级到高级岗位 &#x1f4cc; 前言 为什么面试总被问倒&#xff1f; 为什么项目经验说不清楚&#xff1f; 为什么调优问题总是泛泛而谈&#xff1f; 根本原因&am…...

如何保证 Session ID 的随机性和不可猜测性?

你的 Session ID 安全吗&#xff1f;—— 从可预测的“门禁卡”到安全的“加密钥匙”1. 引言&#xff1a;一张编号可以被猜到的门禁卡2. Session 与 Session ID&#xff1a;会话的“钥匙”3. 为什么 Session ID 必须随机且不可预测&#xff1f;4. 攻击详解&#xff1a;会话劫持…...

ComfyUI-WanVideoWrapper全栈指南:从认知到实践的AI视频生成解决方案

ComfyUI-WanVideoWrapper全栈指南&#xff1a;从认知到实践的AI视频生成解决方案 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 一、认知篇&#xff1a;理解AI视频生成的技术基础 1.1 核心概念…...

Claude Code 是怎么跑起来的:从 Agent Loop 理解代理循环实现

如果你已经会调用大模型、也知道 tool calling 和 agent 的基本概念&#xff0c;那接下来最值得看的问题通常不是“怎么再包一层 prompt”&#xff0c;而是&#xff1a;一个真正能跑任务的 agent&#xff0c;到底是怎么在代码里运转起来的。 这篇文章不从抽象定义讲起&#xff…...

3分钟掌握RegRipper:Windows注册表取证分析的终极武器

3分钟掌握RegRipper&#xff1a;Windows注册表取证分析的终极武器 【免费下载链接】RegRipper3.0 RegRipper3.0 项目地址: https://gitcode.com/gh_mirrors/re/RegRipper3.0 你是否曾面对Windows注册表文件感到无从下手&#xff1f;想知道如何快速提取关键数字证据&…...

从星链到遥感卫星:工程师视角下的轨道摄动实战避坑指南

低轨星座与遥感卫星的轨道摄动实战&#xff1a;工程师避坑手册 当SpaceX的星链卫星以每分钟一颗的速度被发射入轨&#xff0c;当高分系列遥感卫星的成像精度突破亚米级&#xff0c;轨道摄动这个曾经只存在于教科书中的概念&#xff0c;正在成为每个航天工程师的日常挑战。不同…...

别再用requests硬刚了!用Selenium+Playwright搞定小红书评论爬虫(附完整Cookie处理方案)

突破小红书反爬&#xff1a;Selenium与Playwright实战对比与Cookie处理全指南 在小红书这类社交电商平台的数据挖掘中&#xff0c;评论爬取一直是开发者面临的棘手挑战。传统requests库直接调用API的方式看似简单&#xff0c;但面对小红书日益完善的反爬机制——包括动态Cookie…...

10大经典量化策略:实战逻辑+买卖信号+风险点

目录 1. 趋势跟踪策略&#xff08;最主流、最稳&#xff09; 2. 均值回归策略&#xff08;震荡市神器&#xff09; 3. 多因子选股策略&#xff08;机构标配&#xff09; 4. 动量反转策略&#xff08;A 股特别有效&#xff09; 5. 统计套利 / 配对交易&#xff08;低风险&a…...

逆向工程实现原理深度解析:Hook技术高效突破百度网盘macOS版系统限制

逆向工程实现原理深度解析&#xff1a;Hook技术高效突破百度网盘macOS版系统限制 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS BaiduNetdiskPlugin-m…...

ERNIE-4.5-0.3B-PT创意写作实战:用AI帮你生成有画面感的场景描述

ERNIE-4.5-0.3B-PT创意写作实战&#xff1a;用AI帮你生成有画面感的场景描述 1. 为什么需要AI辅助创意写作 在内容创作领域&#xff0c;最令人头疼的莫过于如何让文字"活起来"。传统写作往往面临三大痛点&#xff1a; 画面感不足&#xff1a;描述停留在表面&#…...