数模学习day06-主成分分析

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


问题引出

        在实际问题研究中,多变量问题是经常会遇到的。变量太多,无疑会增加分析问题的难度与复杂性,而且在许多实际问题中,多个变量之间是具有一定的相关关系的.
        因此,人们会很自然地想到,能否在相关分析的基础上,用较少的新变量代替原来较多的旧变量,而且使这些较少的新变量尽可能多地保留原来变量所反映的信息?
        事实上,这种想法是可以实现的,主成分分析方法就是综合处理这种问题的一种强有力的工具。
        主成分分析是把原来多个变量划为少数几个综合指标的一种统计分析方法。从数学角度来看,这是一种降维处理技术

数据降维的作用

        降维是将高维度的数据 (指标太多) 保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。
        在实际的生产和应用中,降维在一定的信息损失范围内可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。


降维具有如下一些优点:
(1)使得数据集更易使用

(2)降低算法的计算开销

(3)去除噪声

(4)使得结果容易理解


例子


主成分分析的

思想


 


计算步骤

 


例题一

相关系数矩阵可以使用  corrcoef 这个函数计算

表中可以看到前三个主成分的累计贡献率达85.9%,因此可以考虑只取前面三个主成分,它们能够很好的概括原式变量。


例题二

这里为什么上半部分是空白的呢,是因为这个样本相关系数矩阵是一个对称的矩阵,所以是空白的。

然后就是计算相关的关键变量.

只要前两项贡献率已经达到了90%多了,所以后面的已经不重要了了。

然后重点就是如何解释主成分了。

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


MATLAB代码实现

lambda = lambda(end:-1:1)

从大到小排序

V=rot90(V)';
disp(V)
将列的顺序调换

clear;clc
load data1.mat   % 主成分聚类
%  load data2.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中进行。

然后就是解释

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


数据可视化

求出R之后将它粘贴到Excel表格中

然后调整行高到   50  这样就是方形的了

然后再选择条件格式

再选择色阶

再修改管理规则

点击编辑规则

再修改成这样就基本上是一个颜色了

样子如下

颜色越深相关系数越强


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


主成分分析用于聚类

(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中进行。
 

spss聚类操作

首先找到系统聚类

移动指标

加上谱系图

画图

通过这个图就可以大致看出聚类的效果


主成分回归

用于解决多重共线性的问题

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

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

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

相关文章

C#64位程序调用32位C/C++库方法

步骤 1、编写32位控制台程序2、实现字符串传参3、封装Process类库4、获取进程调用的返回值 在实际的项目中经常使用一些第三方C/C库,于历史原因,有的C库是32位的,由于没有源代码,所以一般很难修改为64位的类库,但又需要…

Global Mapper SDK 19 中文开发文档(十三)完结

7.4 委托的详细描述 7.4.1 GM_Change3DViewCallbackFunc public delegate void GM_Change3DViewCallbackFunc(GM_Rectangle_t aNewViewBounds, //new 3D view boundsIntPtr aUserData //user data passed into GM_3DSetChangeViewCallback function ) 7…

TCM - 紧耦合内存

ARM 的ram包括静态ram,动态ram,TCM---紧耦合内存(TCM: Tightly Coupled Memories)。 TCM是一个固定大小的RAM,紧密地耦合至处理器内核,提供与cache相当的性能,相比于cache的优点是,程序代码可以精确地控制…

当hashCode相同时,equals是否也相同?

在Java中,理解对象的这两个基本方法—hashCode和equals对于编码是至关重要的,尤其是在处理集合类如HashMap和HashSet时。然而,一个常见的误解是,如果两个对象有相同的哈希码(hashCode),那么它们…

SQL WHERE 语句(条件选择)

WHERE 子句用于过滤记录。 SQL WHERE 子句 WHERE 子句用于提取那些满足指定条件的记录。 SQL WHERE 语法 SELECT column1, column2, ... FROM table_name WHERE condition; 参数说明: column1, column2, ...:要选择的字段名称,可以为多…

iec104和iec61850

iec104和iec61850 IEC104 规约详细解读(一) 协议结构 IEC104 规约详细解读(二)交互流程以及协议解析 61850开发知识总结与分享【1】 Get the necesarry projects next to each other in the same directory; $ git clone https://github.com/robidev/iec61850_open_server.g…

ES(Elasticsearch)的基本使用

一、常见的NoSQL解决方案 1、redis Redis是一个基于内存的 key-value 结构数据库。Redis是一款采用key-value数据存储格式的内存级NoSQL数据库,重点关注数据存储格式,是key-value格式,也就是键值对的存储形式。与MySQL数据库不同&#xff0…

DNS安全与访问控制

一、DNS安全 1、DNSSEC原理 DNSSEC依靠数字签名保证DNS应答报文的真实性和完整性。权威域名服务器用自己的私有密钥对资源记录(Resource Record, RR)进行签名,解析服务器用权威服务器的公开密钥对收到的应答信息进行验证。如果验证失败&…

数字信号处理期末复习——计算小题(二)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

图像清晰度评估指标

图像清晰度评估涉及多个指标,这些指标可用于定量测量图像的清晰度和质量。 以下是一些常见的图像清晰度评估指标: 均方根误差(Root Mean Square Error,RMSE): 通过计算原始图像和处理后图像之间的像素差异的…

【实用工具】Gradio快速部署深度学习应用1:图像分类

前言 在AI快速发展的今天,我们作为算法开发人员,也应该有一些趁手的工具帮助我们快速开发并验证自己的想法,Gradio可以实现快速搭建和共享的功能,能够展示出一个前端界面,把我们的算法包裹起来,快速验证算…

Java八股文面试全套真题【含答案】- Elasticsearch篇

以下是关于Java八股文面试全套真题- Elasticsearch篇 1.什么是Elasticsearch? 答案:Elasticsearch是一个开源的分布式搜索和分析引擎,用于实时存储、搜索和分析大规模数据集。 2.Elasticsearch的主要特点是什么? 答案&#xff…

DNS主从服务器、转发(缓存)服务器

一、主从服务器 1、基本含义 DNS辅助服务器是一种容错设计,考虑的是一旦DNS主服务器出现故障或因负载太重无法及时响应客户机请求,辅助服务器将挺身而出为主服务器排忧解难。辅助服务器的区域数据都是从主服务器复制而来,因此辅助服务器的数…

Vue2多入口,独立打包配置

提示:Vue2多入口,独立打包配置 文章目录 前言一、修改二、打包和效果预览三、具体操作的文件四、代码包总结 前言 需求:富文本编辑器 一、修改 1、复制:index.html文件并改名share.html。 路径:工程文件夹/index.html …

Android studio BottomNavigationView 应用设计

一、新建Bottom Navigation Activity项目&#xff1a; 二、修改bottom_nav_menu.xml: <itemandroid:id"id/navigation_beijing"android:icon"drawable/ic_beijing_24dp"android:title"string/title_beijing" /><itemandroid:id"i…

Leetcode 第 374 场周赛题解

Leetcode 第 374 场周赛题解 Leetcode 第 374 场周赛题解题目1&#xff1a;2951. 找出峰值思路代码复杂度分析 题目2&#xff1a;2952. 需要添加的硬币的最小数量思路代码复杂度分析 题目3&#xff1a;2953. 统计完全子字符串思路代码复杂度分析 题目4&#xff1a;2954. 统计感…

Excel 插件:ASAP Utilities Crack

ASAP Utilities是一款功能强大的 Excel 插件&#xff0c;填补了 Excel 的空白。在过去的 20 年里&#xff0c;我们的加载项已经发展成为世界上最受欢迎的 Microsoft Excel 加载项之一。 ASAP Utilities 中的功能数量&#xff08;300 多个&#xff09;可能看起来有点令人眼花缭乱…

(python)Pyinstaller使用以及相关问题

前言 PyInstaller 可以将 Python 程序打包为独立的可执行文件&#xff0c;不需要用户手动安装 Python 和相关依赖。这使得分发和部署变得更加简单&#xff0c;方便将 Python 程序交付给其他用户或客户。 安装 pip install pyinstaller 相关参数 -F 或 --onefile&#xff1a;…

pdf格式转换为txt格式

pdf文档转换为txt文档 首先在python3虚拟环境中安装PyPDF2 Python 3.6.8 (default, Jun 20 2023, 11:53:23) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux Type "help", "copyright", "credits" or "license" for more infor…

答案解析——C语言—第2次作业:转义字符

本次作业的链接如下&#xff1a;C语言—第2次作业&#xff1a;转义字符 1.下面哪个不是C语言内置的数据类型&#xff1a; C char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 …