首页 > 其他分享 >主成分分析及其matlab实现

主成分分析及其matlab实现

时间:2024-07-10 19:51:50浏览次数:9  
标签:贡献率 特征向量 及其 矩阵 成分 matlab 计算 聚类

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

目录

一、问题提出

某人要做一件上衣要测量很多尺寸,如身长、袖长、胸围、腰围、肩宽、肩厚等十几项指标,但某服装厂要生产一批新型服装绝不可能把尺寸的型号分得过多?而是从多种指标中综合成几个少数的综合指标,做为分类的型号,利用主成分分析将十几项指标综合成3项指标,一项是反映长度的指标,一项是反映胖瘦的指标,一项是反映特殊体型的指标
主成分分析是把原来多个变量划为少数几个综合指标的一种统计分析方法。

二、主成分分析思想

将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且主成分之间无相关性

三、PCA的计算步骤

1.标准化处理

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

3.将前两步骤合为一步————计算相关系数矩阵

4.计算R的特征值和特征向量

5.计算主成分贡献率以及累计贡献率

6.写出主成分

7.根据系数分析主成分代表的意义(困难且关键)

对于某个主成分而言,指标前面的系数越大,代表该指标对于该主成分的影响越大。通过这一原则,我们需要分析出我们得到的主成分到底代表着什么,不然将毫无意义

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

主成分分析可以用于聚类,其最大的好处就是能够将多个指标转化成两个指标,画出聚类图。
而主成分分析用于回归则是可以有效避免多重共线性的问题,毕竟提取主成分的前提就是主成分之间无相关性

9.主成分分析的说明

主成分的解释其含义一般多少带有点模糊性,不像原始变量的含义那么清楚、确切,这是变量降维过程中不得不付出的代价。
主成分分析的困难之处主要在于要能够给出主成分的较好解释,所提取的主成分中如有一个主成分解释不了,整个主成分分析也就失败了。

三、主成分分析matlab代码详解

我们以31个省份在各个领域内的平均消费数据为例,此处有31个个案,8个指标

1.计算样本相关系数矩阵

x是一个31行,8列的数据,计算相关系数矩阵后得到一个8行8列的矩阵
R = corrcoef(x)

2.计算R的特征值和特征向量

得到特征向量vector与一个特征值在对角线上的对角矩阵
[V,D] = eig(R)

3.计算主成分贡献率和累计贡献率

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')

4.处理特征向量矩阵

由于matlab内置的计算特征值与特征向量的函数返回的值是从小到大排序的,这里我们需要将特征值与特征向量从大到小排序(优先选用贡献率大的主成分)

disp('与特征值对应的特征向量矩阵为:')
% 注意:这里的特征向量要和特征值一一对应,之前特征值相当于颠倒过来了,因此特征向量的各列需要颠倒过来
%  rot90函数可以使一个矩阵逆时针旋转90度,然后再转置,就可以实现将矩阵的列颠倒的效果
V=rot90(V)';
disp(V)

5.计算我们所需要的主成分的值

在上一步我们已经计算出了累积贡献率,那么在这可以由用户从累积贡献率判断选取m个主成分,然后进行一个m次的循环,得出主成分的值
返回的F矩阵是一个31行,2列的矩阵。其意义是31个个案对应的两个主成分的指标

m =input('请输入需要保存的主成分的个数:  ');
F = zeros(n,m);  %初始化保存主成分的矩阵(每一列是一个主成分)
for i = 1:m
    ai = V(:,i)';   % 将第i个特征向量取出,并转置为行向量
    Ai = repmat(ai,n,1);   % 将这个行向量重复n次,构成一个n*p的矩阵
    F(:, i) = sum(Ai .* X, 2);  % 注意,对标准化的数据求了权重后要计算每一行的和
end

四、主成分聚类

我们得到了由31个个案,2个指标组成的矩阵,这样我们可以根据这两个指标对这31个个案进行聚类,并且能够方便画出其聚类图

1.进行系统聚类

这里我们使用系统聚类,通过谱系图判断聚三类,把聚三类的结果保存到我们的数据集中

2.图表构建器创造聚类图

这里我们利用图表构建器创造聚类图,设置如图所示,把颜色依据设置为聚类结果,点ID标签设置为省份,这样图上就会显示出省份的名称

五、主成分回归

主成分回归:将x使用主成分得到主成分指标,并将y标准化,接着导出到Excel,然后再使用spss回归
Y = zscore(y); % 一定要将y进行标准化哦~
在Excel第一行输入指标名称(Y,F1, F2, ..., Fm)
分别双击Matlab工作区的Y和F,进入变量编辑中,然后复制里面的数据到Excel表格
导出数据之后,我们后续的分析就可以在Stata中进行。

标签:贡献率,特征向量,及其,矩阵,成分,matlab,计算,聚类
From: https://www.cnblogs.com/dlmuwxw/p/18294808

相关文章

  • 【Linux】00.Linux 介绍及其环境搭建
    一、Linux的发展史想要谈Linux的发展史,还是得先从UNIX开始讲起。1.1UNIX的发展历程1968年,一些来自通用电器公司、贝尔实验室和麻省理工学院的研究人员开发了一个名叫Multics的特殊操作系统。Multics在多任务文件管理和用户连接中综合了许多新概念。1969-1970年,AT&T的......
  • HTTP与HTTPS详解及其请求与响应报文的查看方法
    HTTP与HTTPS详解及其请求与响应报文的查看方法HTTP与HTTPS概述**HTTP(HyperTextTransferProtocol)**是一种用于传输超文本数据(例如HTML)的应用层协议,是Web中最基础的通信协议。它通过客户端-服务器模型工作,客户端(例如浏览器)向服务器发送请求,服务器返回相应的资源。**HTTP......
  • PCA(主成分分析)--降维的基础算法
    一.原理简介PCA主成分分析,是一种使用较为广泛的数据降维算法,主要思想是将n维数据特征映射到k维上,这k维全新的正交数据特征称为主成分;PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据......
  • 【C语言】学习笔记:找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置
    找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置。首先,定义了必要的变量,包括用于遍历数组的索引变量i和j,以及用于存储最大值及其位置的变量hang、lie和max。定义了一个名为arry的二维数组,并初始化了其元素。使用两个嵌套的for循环来遍历数组,并......
  • 有关电力电子技术的一些相关仿真和分析:②单相电压二重化逆变电路(MATLAB/Siumlink仿真)
    1.1题目要求使用单相半桥型逆变器或全桥型逆变器,构建单相电压二重化逆变电路,参看教材中图4-20。仿真观察单个逆变器的时序波形及输入输出电压关系,研究串联多重化的基本原理,分析绘制移相角与输出电压的幅值关系曲线,移相角与输出电压畸变率的关系曲线,移相角与3、5、6、7、9次谐......
  • 有关电力电子技术的一些相关仿真和分析:③三相桥式逆变电路(MATLAB/Siumlink仿真)
    三相桥式逆变电路题目要求三相桥式逆变电路。仿真实现其基本时序波形,分析开关的电压、电流状态。计算输出电压和输出电流中基波及5、7、11、13次谐波含量,并与仿真结果对比。参数设置:三相桥式逆变电路,直流侧电压200V,系统频率50HZ,阻感负载R=5Ω,L=0.01H。参数设置首先在MATL......
  • CSS 选择符及其继承属性详解
    CSS(层叠样式表)是网页设计中不可或缺的一部分,它负责控制网页的样式和布局。CSS选择符是CSS规则的核心,用于选择HTML元素并应用样式。本文将详细介绍CSS选择符的种类,并探讨哪些CSS属性是可以继承的。1.CSS选择符的种类CSS选择符用于选择HTML元素,以便为其应用样式......
  • Transformer-GRU预测 | Matlab实现Transformer-GRU时间序列预测
    Transformer-GRU预测|Matlab实现Transformer-GRU时间序列预测目录Transformer-GRU预测|Matlab实现Transformer-GRU时间序列预测效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现Matlab实现Transformer-GRU时间序列预测,Transformer-GRU......
  • matlab对于视频的处理——抽帧
    本章会介绍如何利用matlab进行视频处理,也就是抽帧总所周知,视频是由一张一张图片所构成的,那么如何用matlab将视频中的每一张图片提取出来呢?目录一、视频的预处理二、读取视频三、分离图片四、效果预览一、视频的预处理matlab可以对视频处理的前提是可以读取视频文件的信息,而有......
  • 【matlab】层次分析算法
    目录一、层次分析算法实现的主要步骤1.1 建立层次结构模型1.2构造成对比较矩阵(判断矩阵)1.3计算权向量并做一致性检验1.4计算组合权向量并做组合一致性检验二、层次分析算法的应用三、MATLAB代码实现        MATLAB中的层次分析算法(AnalyticHierarchyPr......