快速搞定PCA(主成分分析)(原理 代码 案例)

article/2025/6/7 11:10:11

目录

一、基本介绍

1.1原理

1.2主成分分析的几何解释

1.3主要步骤

 1.4主成分个数的选取原则

 二、主成分分析代码

2.1MATLAB代码

 2.2Python代码

 三、实用案例

一、基本介绍

1.1原理

主成分分析是最常用的线性降维方法,通过某种线性投影,将高维的数据映射到低维的空间,并期望在所投影的维度上数据的信息量最大(方差最大),以较少的数据维度去反映原数据的特性。

在机器学习的实际问题中,一般都会有几十个指标,高维数据离散度较大,不利于训练出较好的参数,而低维数据则可以更好的训练参数,因此可以通过降维的形式,计算出k列映射数据替代原数据。

1.2主成分分析的几何解释

通过旋转变换坐标轴使得n个样品点在F1轴方向上的离散程度最大,即F1的方差最大。变量F1代表了原始数据的绝大部分信息,在研究某经济问题时,即使不考虑变量F2也无损大局。经过上述旋转变换原始数据的大部分信息集中到F1轴上,对数据中包含的信息起到了浓缩作用。 

1.3主要步骤

1. 求样本均值

\bar{X}=\frac{1}{n} \sum_{i=1}^{N}x_{i}

2.求样本协方差矩阵S

3.计算协方差矩阵的特征值和特征向量

4.将特征值排序

5.保留前N个最大的特征值对应的特征向量

6.将原始特征转换到上面得到的N个特征向量构建的新空间中

7.写出主成分的表达式

注:第五步和第六步,实现了特征压缩。 

每个主成分的系数平方和为1。即

 主成分之间相互独立,即无重叠的信息。即

 主成分的方差依次递减,重要性依次递减,即

1.4主成分个数的选取原则

首先需要计算各主成分的方差,再求出各自对应的方差贡献率(即对应主成分方差除以总方差), 根据累积贡献率的大小取前面m 个(m<p)主成分,p代表所有的主成分。

选取原则: ​​​​

 二、主成分分析代码

2.1MATLAB代码

clear;clc
PHO = [1     0.79    0.36    0.76    0.25    0.510.79  1       0.31    0.55    0.17    0.350.36  0.31    1       0.35    0.64    0.580.76  0.55    0.35    1       0.16    0.380.25  0.17    0.64    0.16    1       0.630.51  0.35    0.58    0.38    0.63    1];
[COEFF,latent,explained] = pcacov(PHO)
%分别代表协方差矩阵、特征值、贡献率
% 为了更加直观,以元胞数组形式显示结果
result1(1,:) = {'特征值', '差值', '贡献率', '累积贡献率'};
result1(2:7,1) = num2cell(latent);
result1(2:6,2) = num2cell(-diff(latent));
result1(2:7,3:4) = num2cell([explained, cumsum(explained)])
% 以元胞数组形式显示主成分表达式
s = {'标准化变量';'x1:身高';'x2:坐高';'x3:胸围';'x4:手臂长';'x5:肋围';'x6:腰围'};
result2(:,1) = s ;
result2(1, 2:4) = {'Prin1', 'Prin2', 'Prin3'};
result2(2:7, 2:4) = num2cell(COEFF(:,1:3))

 2.2Python代码

from sklearn.decomposition import PCA
import pandas as pd
import ospath=".csv"#存放文件路径
df=pd.read_csv(path)#读取文件pca=PCA()#创建对象
df=(df.iloc[:,2:]-df.iloc[:,2:].mean())/df.iloc[:,2:].std()#对数据进行中心化处理
#print(df)
pca.fit(df)
print(pca.components_)#返回模型的各个特征向量
print(pca.explained_variance_ratio_)#返回各个成分各自的方差百分比
pca=PCA(2)#设置转化主成分个数两个
pca.fit(df)
low_d=pca.transform(df)
print(low_d)#返回降维后的数据

 三、实用案例

下表列出了2007年我国31个省、市、自治州和直辖市的农村居民家庭平均每人全年消费性支出的8个主要变量数据。是根据这8个主要变量的观测数据,进行主成分分析。 

单位:元

地区

食  品

衣  着

居  住

家庭设备

及服务

交通和通讯

文教娱乐

用品及服务

医疗保健

 北  京

2132.51

513.44

1023.21

340.15

778.52

870.12

629.56

 天  津

1367.75

286.33

674.81

126.74

400.11

312.07

306.19

 河  北

1025.72

185.68

627.98

140.45

318.19

243.30

188.06

 山  西

1033.68

260.88

392.78

120.86

268.75

370.97

170.85

 内蒙古

1280.05

228.40

473.98

117.64

375.58

423.75

281.46

 辽  宁

1334.18

281.19

513.11

142.07

361.77

362.78

265.01

 吉  林

1240.93

227.96

399.11

120.95

337.46

339.77

311.37

 黑龙江

1077.34

254.01

691.02

104.99

335.28

312.32

272.49

 上  海

3259.48

475.51

2097.21

451.40

883.71

857.47

571.06

 江  苏

1968.88

251.29

752.73

228.51

543.97

642.52

263.85

 浙  江

2430.60

405.32

1498.50

338.80

782.98

750.69

452.44

 安  徽

1192.57

166.31

479.46

144.23

258.29

283.17

177.04

 福  建

1870.32

235.61

660.55

184.21

465.40

356.26

174.12

 江  西

1492.02

147.71

474.49

121.54

277.15

252.78

167.71

 山  东

1369.20

224.18

682.13

195.99

422.36

424.89

230.84

 河  南

1017.43

189.71

615.62

136.37

269.46

212.36

173.19

 湖  北

1479.04

168.64

434.91

166.25

281.12

284.13

178.77

 湖  南

1675.16

161.79

508.33

152.60

278.78

293.89

219.95

 广  东

2087.58

162.33

763.01

163.85

443.24

254.94

199.31

 广  西

1378.78

86.90

554.14

112.24

245.97

172.45

149.01

 海  南

1430.31

86.26

305.90

93.26

248.08

223.98

95.55

 重  庆

1376.00

136.34

263.73

138.34

208.69

195.97

168.57

 四  川

1435.52

156.65

366.45

142.64

241.49

177.19

174.75

 贵  州

998.39

99.44

329.64

70.93

154.52

147.31

79.31

 云  南

1226.69

112.52

586.07

107.15

216.67

181.73

167.92

 西  藏

1079.83

245.00

418.83

133.26

156.57

65.39

50.00

 陕  西

941.81

161.08

512.40

106.80

254.74

304.54

222.51

 甘  肃

944.14

112.20

295.23

91.40

186.17

208.90

149.82

 青  海

1069.04

191.80

359.74

122.17

292.10

135.13

229.28

 宁  夏

1019.35

184.26

450.55

109.27

265.76

192.00

239.40

 新  疆

939.03

218.18

445.02

91.45

234.70

166.27

210.69

clear;clc
[X,textdata] = xlsread('examp12_4_1.xls');
XZ = zscore(X);% 调用princomp函数根据标准化后原始样本观测数据作主成分分析
[COEFF,SCORE,latent,tsquare] = pca(XZ)% 为了直观,定义元胞数组result1,用来存放特征值、贡献率和累积贡献率等数据
explained = 100*latent/sum(latent);
[m, n] = size(X);
result1 = cell(n+1, 4);
result1(1,:) = {'特征值', '差值', '贡献率', '累积贡献率'};
result1(2:end,1) = num2cell(latent);
result1(2:end-1,2) = num2cell(-diff(latent));
result1(2:end,3:4) = num2cell([explained, cumsum(explained)])% 为了直观,定义元胞数组result2,用来存放前2个主成分表达式的系数数据
varname = textdata(3,2:end)';
result2 = cell(n+1, 3);
result2(1,:) = {'标准化变量', '主成分Prin1', '主成分Prin2'};
result2(2:end, 1) = varname;
result2(2:end, 2:end) = num2cell(COEFF(:,1:2))% 为了直观,定义元胞数组result3,用来存放每一个地区总的消费性支出,以及前2个主成分的得分数据
cityname = textdata(4:end,1);
sumXZ = sum(XZ,2);
[s1, id] = sortrows(SCORE,1);
result3 = cell(m+1, 4);
result3(1,:) = {'地区', '总支出', '第一主成分得分y1', '第二主成分得分y2'}; 
result3(2:end, 1) = cityname(id);
result3(2:end, 2:end) = num2cell([sumXZ(id), s1(:,1:2)])% 为了直观,定义元胞数组result4,用来存放前2个主成分的得分数据,以及(食品+其他)-(衣着+医疗)
cloth = sum(XZ(:,[1,8]),2) - sum(XZ(:,[2,7]),2);
[s2, id] = sortrows(SCORE,2);
result4 = cell(m+1, 4);
result4(1,:) = {'地区','第一主成分得分y1','第二主成分得分y2' ,'(食+其他)-(衣+医)'};
result4(2:end, 1) = cityname(id);
result4(2:end, 2:end) = num2cell([s2(:,1:2), cloth(id)])%***************************前两个主成分得分散点图***************************
for i = 1:length(X)
plot(SCORE(i,1),SCORE(i,2),'ko');
text(SCORE(i,1)+0.02,SCORE(i,2)+0.05,cityname{i},'FontSize',10,'fontname','宋体');
hold on
end
xlabel('第一主成分得分');
ylabel('第二主成分得分');
set(gca,'FontName','宋体');result5 = sortrows([cityname, num2cell(tsquare)],2);
[{'地区', '霍特林T^2统计量'}; result5]

http://chatgpt.dhexx.cn/article/TtKf7ic9.shtml

相关文章

【机器学习】主成分分析实现案例 (PCA)

一、说明 这篇文章的目的是提供主成分分析&#xff08;PCA&#xff09;的完整和简化的解释。我们将逐步介绍它是如何工作的&#xff0c;这样每个人都可以理解并使用它&#xff0c;即使是那些没有强大数学背景的人。 PCA是网络上广泛覆盖的机器学习方法&#xff0c;并且有一些关…

什么是主成分分析?经典案例解析变量降维

1、作用 主成分分析将多个有一定相关性的指标进行线性组合&#xff0c;以最少的维度解释原数据中尽可能多的信息为目标进行降维&#xff0c;降维后的各变量间彼此线性无关&#xff0c;最终确定的新变量是原始变量的线性组合&#xff0c;且越往后主成分在方差中的比重也小&…

比较两篇文章的相似性方法

对于这个题目&#xff0c;开始毫无头绪&#xff0c;后来经过查阅资料现在讲方法总结如下&#xff1a; 1、利用余弦定理 我们知道向量 a,b之间的夹角可用余弦定理求得&#xff1a; 如果夹角的余弦值越小&#xff0c;那么夹角也越大。如果2个向量相等&#xff0c;那么其值为1。利…

Python案例分析|文本相似度比较分析

本案例通过设计和实现有关文本相似度比较的类Vector和Sketch&#xff0c;帮助大家进一步掌握设计Python类来解决实际问题的能力。 01、文本相似度比较概述 通过计算并比较文档的摘要可实现文本的相似度比较。 文档摘要的最简单形式可以使用文档中的k-grams&#xff08;k个连…

计算机如何判断两篇文章相似性

这个仍然是极客时间上&#xff0c;关于《索引技术核心20讲》的一篇笔记同时结合自己的理解加了点料&#xff0c;这个专栏虽然只有20讲&#xff0c;但是真不错&#xff0c;老师解答问题还是很积极&#xff0c;回答字数经常比问题字数多。有兴趣的朋友可以到我星球&#xff08;在…

ai写文章检测原理(文章相似度检测)

小编来了&#xff01;今天要和大家聊一聊关于ai写文章检测原理的评测对比。究竟哪种方法更加高效准确呢&#xff1f;让我们一起来看看吧&#xff01; 概括&#xff1a;本文将从多个角度对ai写文章检测原理进行评测对比&#xff0c;包括算法准确性、速度、自动化程度、用户体验…

【跨语言剽窃检测】文本相似度分析之一

对比文件1&#xff1a; 2010年的跨语言剽窃检测新方法 作者RaFael Corezola Pereira instituion : UFRGS 摘要&#xff1a; 作者提出一个跨语言剽窃检测新方法&#xff0c;分为5个主要阶段&#xff1a; languange normalization、retrieval of candidate documents、classfier …

文本相似度综述

本文目录 文本相似度的定义文本相似度计算方法基于字符串的方法基于语料库的方法基于词袋VSMLSA、PLSALDA&#xff08;需要进一步了解&#xff09; 基于神经网络基于搜索引擎 基于世界知识基于本体基于网络知识 其他方法句法分析混合方法 文本相似度的定义 其中, common&#x…

JAVA-计算两篇文章的相似度

1.场景&#xff1a; 在很多公司的文件管理系统中&#xff0c;都有类似于对比多篇文章的相似度&#xff0c;例如在写公众号推文时&#xff0c;如果标记了原创&#xff0c;就会对比当前文章和库里已存在文章的相似程度&#xff0c;如果相似度过于高&#xff0c;则标记为原创的文章…

免费好用的文章相似度检测软件推荐

相信很多人在写作的时候都会遇到这样的问题&#xff0c;就是怕自己写出的文章被抄袭。为了保证自己的原创性&#xff0c;我们需要使用一些文章相似度检测软件来帮助我们检测文章是否被抄袭。那么&#xff0c;有哪些免费好用的文章相似度检测软件呢&#xff1f;下面就为大家介绍…

判断两篇文章的相似度

判断相似度 基于jieba 关键字提取的方法textrank关键字的提取代码&#xff1a;tf-idf关键字的提取代码&#xff1a;统计数据统计数据的代码&#xff1a;完整代码&#xff1a; 基于jieba 关键字提取的方法 textrank 1&#xff0c;将待抽取关键词的文本进行分词 2&#xff0c;以…

检测文章相似度的方法?文章原创度检测工具免费

免费检测文章相似度的软件&#xff0c;什么是检测文章相似度的软件&#xff0c;简单来说就是原创检测工具&#xff0c;相信不少的朋友都在利用这个功能来检测自己文章的原创度是多少&#xff1f;要做好一篇文章真的只需要检测文章的相似度吗&#xff1f;答案&#xff1a;肯定是…

[将小白进行到底] 如何比较两篇文章的相似度

其实这个题目已经有很多人写过了&#xff0c;数学之美里就有&#xff0c;最近阮一峰的博客里也写了&#xff0c;本文基本上遵循的就是他的思路&#xff0c;只是让其看起来再小白一点点。其实说白了就是用自己的话&#xff0c;再把同样一件事描述一下&#xff0c;顺便扩扩句&…

文本相似度的检测

项目原理 基于词频:统计文章中词频,构建词频特征向量,利用特征向量夹角的余弦值表示文本的相似度。两篇文章最大相似度为1,特征向量夹角为0。 基于词频的文本相似度检测步骤: 文本1和文本2分词—去停用词统计两篇文章的词频词频向量1和词频向量2相似度的计算分词:例:“…

网页抓取:PHP实现网页爬虫方式小结

抓取某一个网页中的内容&#xff0c;需要对DOM树进行解析&#xff0c;找到指定节点后&#xff0c;再抓取我们需要的内容&#xff0c;过程有点繁琐。LZ总结了几种常用的、易于实现的网页抓取方式&#xff0c;如果熟悉JQuery选择器&#xff0c;这几种框架会相当简单。 一、Ganon …

php中取页面的值_php如何抓取网页上的数据

php中抓取网页内容的实例详解 方法一&#xff1a;使用file_get_contents方法实现$url "http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml"; $html file_get_contents($url); //如果出现中文乱码使用下面代码 //$getcontent iconv("gb2312…

关于如何使用PHP抓取网页数据并进行处理的经验

在网络时代&#xff0c;数据是无处不在的。很多时候&#xff0c;我们需要从网页上获取特定的数据&#xff0c;以便进行进一步的处理和分析。而PHP作为一种强大的编程语言&#xff0c;提供了丰富的函数和库来帮助我们实现这个目标。本文将分享一些关于如何使用PHP抓取网页数据并…

php根据URL获得网页内容

php 中根据url来获得网页内容非常的方便&#xff0c;可以通过系统内置函数file_get_contents(),传入url,即可返回网页的内容&#xff0c;比如获得百度首页的内容代码为&#xff1a; <?php $html file_get_contents(http://www.baidu.com/);echo $html; 就可以显示出百度首…

php抓取网页内容,获取网页数据

php通过simple_html_dom实现抓取网页内容&#xff0c;获取核心网页数据&#xff0c;将网页数据写入本地 xxx.json 文件 其代码实现逻辑&#xff1a; 1. 引入simple_html_dom.php文件 require_once simple_html_dom-master/simple_html_dom.php; 2. 获取远程或者本地html文件…

PS Adobe软件使用 快捷键

两年前学的&#xff0c;为了考一个高新 怕自己忘了 仅为防止以后自己忘记而做的备忘笔记&#xff0c;请勿吐槽 图片类型 JPEG 有损压缩格式(能够将图像压缩在很小的储存空间&#xff0c;图像中重复或不重要的资料会被丢失&#xff0c;因此容易造成图像数据的损伤。尤其是…