主成分分析及MATLAB和SPSS求解整理

主成分分析及MATLAB和SPSS求解整理

主成分分析及MATLAB和SPSS求解整理

文章目录

主成分分析及MATLAB和SPSS求解整理

前言

一、PCA原理解释

1.为什么要用PCA?

2.PCA基本思想

3.PCA算法求解步骤

4.根据求解思路进行求解

二、PCA案例求解

1.利用SPSS求解

2.利用MATLAB求解

总结

前言

主成分分析是一种数据降维的方法,在数据模型的建立以及机器学习数据白化过程中都是有十分广泛的应用。本文是作者在学习PCA方法及求解过程中整理所得到的内容,主要包含第一部分PCA原理的解释,第二部分关于不同工具(即MATLAB和SPSS)对于PCA求解应用对比。

一、PCA原理解释

因为在数据建模时多个变量之间往往会有一定的相关性,会显著增加问题分析的复杂性,有必要采取将多个变量综合为少数有代表性的变量,这些变量能够代表原始数据的大多数信息且不相关,有助于分析建模,主成分分析就能达到这种目的。

数学上的方法就是将原来的变量做线性组合,作为新的综合变量,这种线性组合有可以有很多,具体选取哪几种呢。如果选取第一个线性组合即第一个综合变量 ,这里需要它更多的反映原来变量的信息,这里的“信息”用方差来表示,即:

根据所选的主成分数(K)这里方差越大表示 F1所代表的信息也越多,同时 F2中包含的信息,为了有效的反映原来的信息, F1中已有的信息就不需要再出现在 F2中了,用数学语言表示则为:

这是主成分的基本思想,本质就是数据降维,使得保留的信息最大化,其具体数学推导也是很有意思的,内容较多,我后面有时间更新,作者的这篇博客对于其算法原理的解释通过数据向量的角度出发,个人认为解释也十分清楚,可以试着看看。

设有m条P维数据。

1)将原始数据按列组成n行P列矩阵X

2)数据标准化

3)求出相关系数矩阵(有些地方说的是协方差矩阵,其实本质是一样的,因为相关系数矩阵其实就是协方差矩阵的标准化形式)

4)求出相关系数矩阵的特征值及对应的特征向量

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,选取累计贡献率在85%(常规标准)以上的特征值对应特征向量,最后组成mk的主成分特征向量矩阵

6)将标准化后的数据(np)和主成分特征向量矩阵(nk)相乘,得到降维后的主成分得分,即为降维到k维后的数据(nk)

7)每个样本的主成分得分和和每个主成分的贡献率相乘可以得到每个样本综合得分

第一步:对数据标准化处理

假设样本观测数据为:

其中表示有n个样本、P个维度

数据标准化处理:

标准化求解(可以直接调用matlab的函数)

A=x(I,j)%样本数据

Std(A)%求解每一列的标准差

Mean(A)%求解每一列的均值

%%或者直接用zscore(X)直接求得标准化样本数据矩阵

zscore(X)

第二步:求解样本相关系数(求解每一个属性下样本的相关系数,即每一列的相关系数)

其中:

对于相关系数矩阵的求解也是可以直接调用matlab中的函数进行求解

Corrcoef(a)%求解a的相关系数矩阵(有的地方提到的是协方差矩阵,其实相关系数矩阵就是协方差矩阵的标准化(无量纲化)的形式

第四步:求解相关系数矩阵的特征值以及特征向量

注意:这里的特征值直接代表的是对应主成分的方差大小,因为特征值表示的是伸缩的比例,占总的特征值越多的话,表示越贡献率越大。具体解释可以参考这篇博客的内容,个人认为讲解的是很形象清楚的,对于理解PCA的原理有一定帮助。

R的特征值

对应特征向量(所求的特征向量即所求的变换之后的坐标轴,数值代表每个维度的基)

步骤五:选择主成分

主成分的选择根据特征值的大小来选择,例如:选择前k个,但一般要求累计贡献率达到85%以上

步骤六:主成分表达式

步骤七:主成分得分,即降维后的数据

步骤八:根据前文求得的各个主成分的贡献比例作为权重,计算的到综合得分

注意:我这里的求解思路和前面写的列的求解提纲思路是一样的,但在表达上不是一致,这个不影响。

二、PCA案例求解

根据上文对于PCA原理的解释以求求解的数学过程分析,这里结合实际案例以及不同工具进行求解,具体数据为15个企业的8个经营数据进行降维分析,通过PCA对主成分进行打分,以及得出综合得分,最终求解得到各个企业的综合得分,并进行排序,达到对企业综合实力的排序目的。

数据的百度网盘链接

链接:https://pan.baidu.com/s/1RGx_jAdIqTx5S1h1lwT6mA

提取码:k80w

SPSS没有直接进行主成分分析的命令,但可以通过自带的因子分析数据降维方式进行转换最终得到进行主成分的分析的目的

第一步:数据标准化处理

点击“分析——降维——因子分析”

这里抽取可以基于特征值也可以固定数量,我这里上面分析得到三个累计贡献达到了85%以上,就直接固定了数量为3个

具体输出结果

不能直接进行主成分分析,需要进行变换才能得到系数矩阵(特征向量矩阵)

主成分系数=成分矩阵中的数据/sqrt(主成分对应特征值)

最后根据上式进行换算,得到得分系数矩阵(特征向量矩阵)

然后根据主成分公式计算得到主成分得分和综合得分,具体的就求解了,这里的目的是为了说明SPSS不能直接进行主成分分析,需要将得到的成分矩阵进行转换最后才能得到特征向量矩阵(得分系数矩阵),然后进行PCA降维

MATLAB对于PCA求解可以直接调用函数,也可以根据前文的算法原理以及求解的步骤自己编写代码,我将两种方法均进行求解,最终得到的结果也是相同,先将代码放出

% pca主成分分析整理

clc

clear

A=xlsread('Coporation_evaluation.xlsx', 'B2:I16');%调用15家企业的经济数据进行主成分分析

SA=zscore(A)

%%

%直接调用pcacov函数做主成分分析

%[COEFF,latent,explained] = pcacov(PHO);

%其中PHO为相关系数矩阵,可以通过PHO=corrcoef(A) 求得

%COEFF为调用函数求得的主成分表达式的系数矩阵,即特征向量矩阵,这里第一类所代表的特征向量即对应特征值最大的向量(自动排序)

% latent为特征向量对应的特征值

% explained主成分贡献率

%调用函数计算得到

[COEFF,latent,explained] = pcacov(corrcoef(SA));

% 为了更加直观,以元胞数组形式显示结果

result1(1,:) = {'特征值', '贡献率', '累积贡献率'};

result1(2:9,1) = num2cell(latent);

%diff函数式用于求导数和差分的.

%result1(2:9,2) = num2cell(-diff(latent));

%cumsum函数通常用于计算一个数组各行的累加值。

result1(2:9,2:3) = num2cell([explained, cumsum(explained)]);

%根据上面的result1可以知道,前三个主成分贡献率为

% 以元胞数组形式显示前3个主成分表达式

s = {'标准化变量';'x1:净利润率';'x2:固定资产利润率';'x3:总产值利润率';'x4:销售收入利润率';'x5:产品成本利润率';'x6:物耗利润率';'x7:人均利润率';'x8:流动资金利润率';};

result2(:,1) = s ;

result2(1, 2:4) = {'特征向量1', '特征向量2', '特征向量3'};

result2(2:9, 2:4) = num2cell(COEFF(:,1:3));

%result2即主成分特征向量矩阵

report=SA*COEFF(:,1:3);%每个主成分的得分

explained0=explained./100;%得到贡献率

report_total=report*explained0(1:3,1);%综合得分

i=1:15;%定义一个序列

xu=i';%

report_totalz=[report,report_total,xu];%输出降维后的各个样本的数据以及综合得分以及序号

last_score=sortrows(report_totalz,-4);%对综合得分进行降序排序(减号表示降序)

%注意可视化之类的

plot3(report(:,1),report(:,2),report(:,3),'ko')

%% 手动编写

%

clc

clear

A=xlsread('Coporation_evaluation.xlsx', 'B2:I16');%调用15家企业的经济数据进行主成分分析

% Transfer orginal data to standard data

a=size(A,1); % Get the row number of A确定行数

b=size(A,2); % Get the column number of A确定列数

for i=1:b

SA(:,i)=(A(:,i)-mean(A(:,i)))/std(A(:,i)); % Matrix normalization%数据标准化处理

end

% Calculate correlation matrix of A.标准化的原始数据的相关系数矩阵

CM=corrcoef(SA);

% Calculate eigenvectors and eigenvalues of correlation matrix.

%其中v代表求得的特征向量矩阵,这里的V的排序,调用eig可能出来的是按特征值升序排序

%D代表特征值(对角矩阵),

[V, D]=eig(CM);%计算特征值(对角矩阵)和特征向量

% Get the eigenvalue sequence according to descending and the corrosponding

% attribution rates and accumulation rates.

for j=1:b

DS(j,1)=D(b+1-j, b+1-j);%对特征值进行排序

end

for i=1:b

DS(i,2)=DS(i,1)/sum(DS(:,1));%贡献率

DS(i,3)=sum(DS(1:i,1))/sum(DS(:,1));%累积贡献率

end

% Calculate the numvber of principal components.

T=0.9; % set the threshold value for evaluating information preservation level.主成分信息保留率

for K=1:b

if DS(K,3)>=T

Com_num=K;%得到保留的主成分数

break;%终止循环

end

end

% Get the eigenvectors of the Com_num principal components

for j=1:Com_num

PV(:,j)=V(:,b+1-j);

end

% Calculate the new socres of the orginal items

new_score=SA*PV;%主成分得分

for i=1:a

%total_score(i,2)=sum(new_score(i,:));%求解综合得分,这里是对每一个主成分的简单求和

%total_score(i,2)=new_score(i,1)*DS(1,2)+new_score(i,2)*DS(2,2)+new_score(i,3)*DS(3,2)

n=1:3;

total_score(i,2)=new_score(i,n)*DS(n,2);

total_score(i,1)=i;%给个序列

end

result_report=[new_score,total_score]%最终输出每个主成分得分以及综合得分以及每个序号所对应的综合排名

result_report=sortrows(result_report,-5)

% 显示结果

disp('特征值及贡献率:')

DS

disp('阀值T对应的主成分数与特征向量:')

Com_num

PV

disp('主成分分数:')

new_score

disp('主成分分数排序:')

result_report

调用函数求解结果

调用函数求解得到的特征值及贡献率

对比上文的SPSS求解这个是没有问题的

得到的特征向量矩阵

前文SPSS没有求解,但根据换算的公式,最终的到结果理论也应该是如此

最后的主成分得分以及综合得分以及综合实力排序

同理,自己根据原理编写代码相关结果如下:

特征值及其贡献率

得到的特征向量矩阵

最终主成分得分及其综合得分排名

排名有一些出入,主要是由于调用函数的代码部分在进行综合得分输出的时候的每个主成分的权重和自己编写的时候权重的大小(根据贡献大小确定对应权重)有些差异导致。但结果基本一致。

总结

个人认为主成分分析这种降维的方法的使用其实并不难,稍微需要花点时间理解的是其数学原部分,想要运用的话,例如matlab也是可以直接调用函数求解,但要想灵活的运用,还是认为需要真正了解其原理,然后进行程序编写就也会轻松很多。 主成分分析的求解主要就是这些,当然个人认为算法原理部分解释的不太好,可以借鉴我推荐的那几篇我认为写的好的文章,使用csdn不多,编辑排版也可能比较差,还是短时间内赶出来的,不好的地方还望见谅,第一次系统的整理一篇文章,文中的错误以及解释不清的也希望读者可以不吝指正,毕竟能力有限,希望可以相互学习,后面可能会更新,继续完善这一部分。

主成分分析及MATLAB和SPSS求解整理相关教程

spss和matlab主成分符号,主成分分析及MATLAB和SPSS求解整理相关推荐

  1. matlab 主成分 分类,matlab主成分分析

    %求出累积贡献率大于85%的主成分 NEW=z*v(:,1:i)%输出产生的新坐标下的数据 W=100*eig1/sum(eig1) figure(1) pareto(W);%画出贡献率的直方图 %主 ...

  2. spss主成分综合得分_如何用SPSS软件一步算出主成分得分值_林海明

    & Information Fo rum 2007 年 9 月 Sept . , 2007 收稿日期 : 2007 - 04 - 15 基金项目 : 广州市哲学社会科学规划资助 课题 ( 06 ...

  3. 【图像融合】基于matlab主成分结合小波离散变换PCA-DWT图像融合【含Matlab源码 2199期】

    一.小波变换彩色图像融合简介 1 基于小波的图像融合 1.1 小波的分解和重构 小波变换是一种能够用来检测信号局部特征的数学工具.当然也可以将二维信号分解成不同分辨率的子带信号.由于图像为二维信号, ...

  4. matlab偏导符号怎么打,matlab 如何输入导数

    小杉hxs的回答: 第一步首先看一下matlab常用的求导,求偏导函数,如下图所示: 第二步在我们的电脑上打开matlab,在命令行窗口中输入syms x,f(x)=sin(x)+x^2 ,diff( ...

  5. matlab中特殊符号ommiga,在MATLAB中输入特殊符号---方法集锦

    在matlab中怎么输入特殊符号 Character Sequence Symbol Character Sequence Symbol Character Sequence Symbol \alph ...

  6. 在matlab中何为符号变量,在MATLAB中,把x、y定义成符号变量正确的的指令是( )...

    [解析题]半月板损伤的特有体征包括( ). [解析题]15-16世纪的大翻译运动是将阿拉伯文翻译为希腊文.() [解析题]中国大学MOOC: 区分以完成一定的工作任务为期限的劳动合同与其他民事合同的标 ...

  7. MATLAB小技巧(20)矩阵分析--主成分回归

    MATLAB小技巧(20)矩阵分析--主成分回归 前言 一. MATLAB仿真 二. 仿真结果 三. 小结 前言 MATLAB进行图像处理相关的学习是非常友好的,可以从零开始,对基础的图像处理都已经有 ...

  8. 主成分在spss中的操作应用

    主成分分析在SPSS中的操作应用 主成分分析在SPSS中的操作应用 主成分分析原理 主成分分析法简介 主成分分析数学模型 对沿海 10 个省市经济综合指标进行主成分分析 生成图表 方法一 方法二 方法 ...

  9. matlab 归一化_MATLAB主成分PCA人脸识别深度解析(一)

    前言:人脸识别是一个很经典的课题,围绕它可以做成很多实际应用,比如教室人脸考勤,人脸门禁系统,无人超市购物系统,刷脸支付系统等等.可是,为什么这一切是靠什么进行匹配人脸的呢,怎么那么神奇呢.人脸识别的 ...

  10. 主成分分析,充分图,聚类,主成分回归——数据分析与R语言 Lecture 11

    主成分分析,充分图,聚类,主成分回归--数据分析与R语言 Lecture 11 主成分分析 例子:求相关矩阵特征值 例子:求主成分载荷 例子:画碎石图确定主成分 例子:主成分得分-相当于predict ...

最新文章

  1. python中文意思k-python中“//”表示什么意思_后端开发
  2. 苹果降低应用商店收入一半分成、Twitter视频分享功能 Fleet、百度36亿美元收购 YY|Decode the Week...
  3. js粘贴板为什么获取不到图片信息_【第1829期】复制黏贴上传图片和跨浏览器自动化测试...
  4. python抽象基类的作用_Python:多态、鸭子模型和抽象基类
  5. Volley学习总结
  6. 2015手机病毒暴涨16倍 每天70万人次连接风险WiFi
  7. 键盘一键自定义组合工具_为开发人员提供社区,通讯和自定义工具的组合
  8. mac java myeclipse_Myeclipse mac版-Myeclipse 2015 Mac版下载 V2015免费版-PC6苹果网
  9. ACM__搜素之BFS与DFS
  10. 当你不能回答别人的提问时怎么办
  11. js手写车牌输入键盘
  12. AWS - VPC Peering
  13. 【转载】电磁波中的波段划分:L波段、S波段、C波段、X波段、Ku波段、K波段、Ka波段 等等
  14. linux 限制单个ip流量,centos 的单ip流量控制-CentOS下利用iptables限速及限制每IP连接数...
  15. Android Q版本实现自动连接WiFi
  16. Photoshop CC 2017 软件安装包+安装教程
  17. python jupyter怎么用_Python的IDE之Jupyter的使用
  18. TP-LINK TL-WDN7200H ubuntu18.04驱动安装
  19. 将m4s文件转为mp4
  20. 丘成桐大学生数学竞赛数学物理

热门文章

  1. DIY 3.5毫米/MMCX接口的耳机线(无麦)
  2. C语言libxml用法,c语言libxml2库的安装和使用.....
  3. 阿里图标库——批量下载图标
  4. ipad录屏软件_如何在 Mac 上优雅的截图和录屏
  5. TOGAF9中文版(二)
  6. 莫烦python强化学习笔记——Q learning
  7. 计算机桌面桌面设置动态视频,电脑怎么设置动态桌面
  8. Linux 字体库复制安装
  9. 安装office2010常见的提示错误解决办法
  10. php求1到100的素数之和,php 质数计算 求100以内质数和