数据:

序号

x1

x2

x3

x4

1

40

2

5

20

2

10

1.5

5

30

3

120

3

13

50

4

250

4.5

18

0

5

120

3.5

9

50

6

10

1.5

12

50

7

40

1

19

40

8

270

4

13

60

9

280

3.5

11

60

10

170

3

9

60

11

180

3.5

14

40

12

130

2

30

50

13

220

1.5

17

20

14

160

1.5

35

60

15

220

2.5

14

30

16

140

2

20

20

17

220

2

14

10

18

40

1

10

0

19

20

1

12

60

20

120

2

20

0

数据标准化:

x1

x2

x3

x4

0

-1.102513

-0.308130

-1.347755

-0.708447

1

-1.440017

-0.782175

-1.347755

-0.251384

2

-0.202502

0.639961

-0.269551

0.662740

3

1.260015

2.062098

0.404327

-1.622571

4

-0.202502

1.114007

-0.808653

0.662740

5

-1.440017

-0.782175

-0.404327

0.662740

6

-1.102513

-1.256220

0.539102

0.205678

7

1.485017

1.588052

-0.269551

1.119803

8

1.597518

1.114007

-0.539102

1.119803

9

0.360004

0.639961

-0.808653

1.119803

10

0.472505

1.114007

-0.134776

0.205678

11

-0.090001

-0.308130

2.021633

0.662740

12

0.922511

-0.782175

0.269551

-0.708447

13

0.247503

-0.782175

2.695510

1.119803

14

0.922511

0.165916

-0.134776

-0.251384

15

0.022500

-0.308130

0.673878

-0.708447

16

0.922511

-0.308130

-0.134776

-1.165509

17

-1.102513

-1.256220

-0.673878

-1.622571

18

-1.327515

-1.256220

-0.404327

1.119803

19

-0.202502

-0.308130

0.673878

-1.622571

数据标准化:也可以用sklearn包

from sklearn import preprocessing

#Z-Score标准化

#建立StandardScaler对象

zscore = preprocessing.StandardScaler()

# 标准化处理

data_zs = zscore.fit_transform(data)

注意:sklearn这种处理求标准差时分母为n,而我们下面的std计算时分母为n-1,Spss里的计算分母也为n-1。

sklearn降维:

pca=dp.PCA(n_components=2) #加载pca算法,设置降维后主成分数目为2

reduced_x=pca.fit_transform(x) #对原始数据进行降维,保存在reduced_x中

数据标准化代码:

import pandas as pd

import numpy as np

csv_data = pd.read_csv('C:/Users/admin/Desktop/2019.10.05/算法/主成分分析/data.csv') # 读取训练数据

csv_data=csv_data.drop('序号', axis=1) #去掉序号那一列

describe=csv_data.describe() # 对每一列数据进行统计,包括计数,均值,std,各个分位数等。

mean=describe.loc['mean']

std=describe.loc['std']

m=csv_data.index.size #行数

n=csv_data.columns.size #列数

column=csv_data.columns.values #['x1' 'x2' 'x3' 'x4']

#实现对数据框里的每个元素进行相关操作

for i in range(0,m):

for j in range(0,n):

csv_data.iloc[i,j]=(csv_data.iloc[i,j]-mean[j])/std[j] #第i行,第j列

print("标准化后的数据:\n",csv_data)

主成分分析:

import pandas as pd

import math

import numpy as np

from scipy import linalg

csv_data = pd.read_csv('C:/Users/admin/Desktop/2019.10.05/算法/主成分分析/data.csv') # 读取训练数据

csv_data=csv_data.drop('序号', axis=1) #去掉序号那一列

corr = csv_data.corr() #求变量之间的相关系数,判断是否可以进行主成分分析

print("原始数据:\n",csv_data)

print("\n相关系数矩阵:\n",corr)

describe=csv_data.describe() # 对每一列数据进行统计,包括计数,均值,std,各个分位数等。

mean=describe.loc['mean']

std=describe.loc['std']

a=list(csv_data['x1'])

x11=[]

for i in range(0,20):

x11.append((a[i]-mean['x1'])/std['x1'])

b=list(csv_data['x2'])

x22=[]

for i in range(0,20):

x22.append((b[i]-mean['x2'])/std['x2'])

c=list(csv_data['x3'])

x33=[]

for i in range(0,20):

x33.append((c[i]-mean['x3'])/std['x3'])

d=list(csv_data['x4'])

x44=[]

for i in range(0,20):

x44.append((d[i]-mean['x4'])/std['x4'])

arr=np.array([x11,x22,x33,x44]) #中心化后的数据

print("\n标准化后的数据:\n",arr.T)

M=corr.values #将相关系数转为矩阵

eig,vec=np.linalg.eig(M) #计算矩阵的特征值、特征向量。eig是list类型,vec是类型

per=[] #贡献率的计算

for i in range(0,4):

per.append(eig[i]/sum(eig))

print("\n相关系数矩阵的特征值:\n",eig)

# vec1=vec[[:]][:,[1,3,2,0]]

per=sorted(per,reverse=True) #贡献率排序(从大到小)

print("\n贡献率排序:\n",per)

print("\n累计贡献率:\n",np.array(per).cumsum()) #贡献率的累计计算

#定义单位正交化的函数

def gram_schmidt(A):

"""Gram-schmidt正交化"""

global Q #必须申明为全局变量,否则无法调用Q

Q=np.zeros_like(A)

cnt = 0

for a in A.T:

u = np.copy(a)

for i in range(0, cnt):

u -= np.dot(np.dot(Q[:, i].T, a), Q[:, i]) # 减去待求向量在已求向量上的投影

e = u / np.linalg.norm(u) # 归一化

Q[:, cnt] = e

cnt += 1

R = np.dot(Q.T, A)

print("\n正交单位化后的特征向量:")

print(Q.T)

gram_schmidt(vec)

print("\n按特征值大小排列的正交单位化后的特征向量:")

print(Q.T[[1,3,2,0][:]])

y=np.dot(arr.T,Q.T[[1,3,2,0][:]].T)

Y=pd.DataFrame(y)

Y.rename(columns={0:'Y1',1:'Y2', 2:'Y3',3:'Y4'}, inplace = True)

print("\n主成分的值(得分):\n",Y)

print("\n主成分相关系数矩阵:")

corr1=Y.corr()

print(corr1)

result = csv_data.join(Y,how='inner')

print("\n原始数据和主成分得分:")

print(result)

corr2=result.corr()

print("\n原始数据和主成分得分之间的相关系数:")

print(corr2.iloc[0:4, 4:8])

输出结果:

相关系数矩阵:

x1

x2

x3

x4

x1

1.000000

0.694984

0.219456

0.024898

x2

0.694984

1.000000

-0.147955

0.135133

x3

0.219456

-0.147955

1.000000

0.071327

x4

0.024898

0.135133

0.071327

1.000000

相关系数矩阵的特征值:

[0.20686561 1.71825161 0.98134701 1.09353577]

贡献率排序:

[0.42956290217587323, 0.2733839423331357, 0.2453367536310203, 0.05171640185997065]

累计贡献率:

[0.4295629  0.70294684 0.9482836  1.        ]

正交单位化后的特征向量:

[[ 0.66588327 -0.66355498 -0.31889547  0.12083021]

[-0.69996363 -0.6897981  -0.08793923 -0.16277651]

[-0.24004879  0.05846333 -0.27031356  0.93053167]

[ 0.09501037 -0.28364662  0.9041587   0.30498307]]

按特征值大小排列的正交单位化后的特征向量:

[[-0.69996363 -0.6897981  -0.08793923 -0.16277651]

[ 0.09501037 -0.28364662  0.9041587   0.30498307]

[-0.24004879  0.05846333 -0.27031356  0.93053167]

[ 0.66588327 -0.66355498 -0.31889547  0.12083021]]

Y1

Y2

Y3

Y4

0

1.218105

-1.451999

-0.048273

-0.185493

1

1.706942

-1.210208

0.430341

-0.040449

2

-0.383874

-0.242355

0.775589

-0.393455

3

-2.075835

-0.594474

-1.801057

-0.854286

4

-0.663462

-0.864250

0.949030

-0.536093

5

1.475180

-0.078406

1.025942

-0.230850

6

1.557370

0.801735

0.236877

-0.047638

7

-2.293467

-0.211550

0.851241

0.156353

8

-2.021514

-0.310116

0.869385

0.631779

9

-0.804599

-0.536949

1.211598

0.208253

10

-1.120804

-0.330221

0.179526

-0.356740

11

-0.010115

2.108850

0.073817

-0.420080

12

-0.014567

0.337162

-0.999271

0.961740

13

-0.053019

3.024066

0.208238

-0.040456

14

-0.707401

-0.157940

-0.409237

0.516795

15

0.252856

0.482766

-0.864806

-0.081055

16

-0.231607

-0.302271

-1.287573

0.720896

17

1.961634

-0.852576

-1.136482

0.118267

18

1.649029

0.206141

1.396532

0.213845

19

0.559148

0.182595

-1.661416

-0.341334

主成分相关系数矩阵:

Y1

Y2

Y3

Y4

Y1

1.000000e+00

-2.120752e-16

-4.499891e-17

7.693762e-16

Y2

-2.120752e-16

1.000000e+00

1.974226e-16

-6.972072e-16

Y3

-4.499891e-17

1.974226e-16

1.000000e+00

2.075015e-16

Y4

7.693762e-16

-6.972072e-16

2.075015e-16

1.000000e+00

原始数据和主成分得分:

x1

x2

x3

x4

Y1

Y2

Y3

Y4

0

40

2.0

5

20

1.218105

-1.451999

-0.048273

-0.185493

1

10

1.5

5

30

1.706942

-1.210208

0.430341

-0.040449

2

120

3.0

13

50

-0.383874

-0.242355

0.775589

-0.393455

3

250

4.5

18

0

-2.075835

-0.594474

-1.801057

-0.854286

4

120

3.5

9

50

-0.663462

-0.864250

0.949030

-0.536093

5

10

1.5

12

50

1.475180

-0.078406

1.025942

-0.230850

6

40

1.0

19

40

1.557370

0.801735

0.236877

-0.047638

7

270

4.0

13

60

-2.293467

-0.211550

0.851241

0.156353

8

280

3.5

11

60

-2.021514

-0.310116

0.869385

0.631779

9

170

3.0

9

60

-0.804599

-0.536949

1.211598

0.208253

10

180

3.5

14

40

-1.120804

-0.330221

0.179526

-0.356740

11

130

2.0

30

50

-0.010115

2.108850

0.073817

-0.420080

12

220

1.5

17

20

-0.014567

0.337162

-0.999271

0.961740

13

160

1.5

35

60

-0.053019

3.024066

0.208238

-0.040456

14

220

2.5

14

30

-0.707401

-0.157940

-0.409237

0.516795

15

140

2.0

20

20

0.252856

0.482766

-0.864806

-0.081055

16

220

2.0

14

10

-0.231607

-0.302271

-1.287573

0.720896

17

40

1.0

10

0

1.961634

-0.852576

-1.136482

0.118267

18

20

1.0

12

60

1.649029

0.206141

1.396532

0.213845

19

120

2.0

20

0

0.559148

0.182595

-1.661416

-0.341334

原始数据和主成分得分之间的相关系数:

Y1

Y2

Y3

Y4

x1

-0.917527

0.099354

-0.237799

0.302860

x2

-0.904202

-0.296616

0.057916

-0.301801

x3

-0.115273

0.945499

-0.267781

-0.145042

x4

-0.213371

0.318928

0.921812

0.054957

python主成分分析实验报告_python进行主成分分析相关推荐

  1. python综合实验报告_Python程序设计实验报告五:综合运用三种基本结构进行程序设计(综合性实验)...

    安徽工程大学 Python程序设计 实验报告 班级 物流191 姓名姚彩琴学号3190505129 成绩 日期 2020.4.22 指导老师修宇 [实验名称]综合运用三种基本结构进行程序设计(综合性实 ...

  2. python综合实验报告_Python程序设计 实验报告

    安徽工程大学 Python程序设计 实验报告 班级:物流192       姓名:刘马汉卿学号:319005211 成绩:            日期:2020年4月29日        指导老师:修 ...

  3. python数据分析实验报告_Python数据分析综合小练习:销售数据分析

    有这样一个小小的练习题: 卖电子商品的老板,每天记录了自己卖出的U盘,电脑支架,插座,电池,音箱,鼠标,usb数据线,手机充电线等数量,客户的需求是一方面,也可以通过客户购买关联性比较强的商品进行引导 ...

  4. python爬虫实验报告_python爬虫实验

    原博文 2013-06-28 13:30 − 那天在新浪微博上看到北北出的题目,由于最近也在做类似的爬虫研究,所以就有了这个实验. 后来在QQ上和北北说了下,要求是啥都抓,就抓乌云的... 然后就开始 ...

  5. python数据分析实验报告_Python 数据分析入门实战

    本训练营中,我们将学习怎么样使用 Python 进行数据分析.课程将从数据分析基础开始,一步步深入讲解.从 Python 的基础用法到数据分析的各种算法,并结合各种实例,讲解数据分析过程中的方方面面. ...

  6. python投资分析实验报告_Python的实验报告怎么写?

    以面向对象程序设计实验为例: 一.实验目的了解面向对象程序设计思想 了解对象.类.封装.继承.方法.构造函数和析构函数基本概念 掌握定义类.成员变量.成员函数.静态变量和静态方法 掌握通过类定义实现继 ...

  7. python冒泡排序实验报告_python中的冒泡排序

    首先,再将python的冒泡排序之前,先来复习一个python中的自带排序函数:sort(但是这个函数是没有返回值的,并且只能针对列表,大家使用的时候需要注意一下): 例子如下: li=[11,22, ...

  8. python万年历实验报告_Python实现的简单万年历例子分享

    #!/usr/bin/env python2 #-*- coding:utf-8 -*- __author__ = 'jalright' """ 使用python实现万年 ...

  9. python万年历实验报告_Python编程——万年历

    2017年五月份日历 万年历这个题目几乎是不论学哪种编程语言必要尝试的一个小知识,综合了循环,逻辑关系判断等各编程语言的基础知识.今天我们一起用Python实现简单的万年历功能(查看某年各个月份日历和 ...

最新文章

  1. Kafka High Availability (下)
  2. html页面button样式
  3. 大学计算机基础课程报告python-基于Python的“大学计算机基础”课程教学设计.doc...
  4. Apache ZooKeeper - 使用Apache Curator操作ZK
  5. 学习Java编程的五步要素
  6. java方法的重载与覆盖的返回值类型
  7. 如何提高写前端的效率?干货,快进!
  8. Daily Scrum 11.5日
  9. Comparable与Comparator对比
  10. springboot 初始化一个常量map_C++ 惯用法: const 常量和字面量
  11. PX4 VTOL控制逻辑
  12. 罗振宇2021“时间的朋友”跨年演讲精华版全文
  13. 画出使用回溯法解0/1背包问题的解空间树
  14. 项目风险管理__常见题
  15. idea local history说明
  16. Android 竖直滚动广告条、上下滚动广告条,View滚动广告条;
  17. “七夕情歌会 缘聚红豆峡” 红豆峡第15届情歌会圆满结束
  18. 【Word】基于知网研学的文字等内容连同参考文献一同复制粘贴
  19. java 保存微信表情_Java微信公众号开发之用户表情存储解决方案
  20. 手写代码详解Android Hook入门demo,android应用案例开发大全第四版源码

热门文章

  1. python基础(19)之 输入输出
  2. 我的世界服务器虚拟菜单插件,《我的世界》服务器快捷菜单插件怎么用?
  3. 「基于模型的系统工程」的发展历程
  4. java 配置jmstemplate_SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解...
  5. springboot整合shiro_Springboot整合Shiro:简洁的身份认证
  6. mysql索引创建及使用注意事项
  7. 【批处理】通过bat文件执行python程序
  8. 【Python】Windows下Python3虚拟环境搭建
  9. Uva 1025 - A Spy in the Metro(DP)
  10. springboot jpa 创建数据库以及rabbitMQ分模块扫描问题