IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 主成分分析(原理 代码 案例) -> 正文阅读

[人工智能]主成分分析(原理 代码 案例)

目录

一、基本介绍

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.51
          0.79  1       0.31    0.55    0.17    0.35
          0.36  0.31    1       0.35    0.64    0.58
          0.76  0.55    0.35    1       0.16    0.38
          0.25  0.17    0.64    0.16    1       0.63
          0.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 os

path=".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]
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:50:39  更:2021-09-10 10:50:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 15:24:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码