python主成分分析实验报告_python进行主成分分析

数据:

序号

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言可以编制出功能复杂的程序,2018级《C语言程序设计》复习题及答案(5页)-原创力文档...

2014 C2014 C级《 语言程序设计》复习题及答案级《 语言程序设计》复习题及答案一、单项选择题一、单项选择题1 C (B )1、以下不是 C 语言的特点的是 (B )、以下不是 语言的特点的是A CA C、 语言简洁、紧凑、 语言简洁、紧凑BB、 能够编制出功能复杂的程序、 能够编制出功能复…

通知:即日起本博客暂停更新,请移步至yanxin8.com获取最新文章

通知:即日起本博客暂停更新,请移步至yanxin8.com与博主交流及获取最新文章 转载于:https://www.cnblogs.com/iplus/p/4467089.html

python修饰器原理_Python修饰器的函数式编程

Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西。虽然好像,他们要干的事都很相似——都是想要对一个已有的模块做一些“修饰工作”&a…

电影俱乐部c语言程序,C语言课程设计___电影俱乐部程序设计

《C语言课程设计___电影俱乐部程序设计》由会员分享,可在线阅读,更多相关《C语言课程设计___电影俱乐部程序设计(22页珍藏版)》请在人人文库网上搜索。1、学 院: 专 业: 姓 名: 学 号:指导老师: 前 言 C语言…

[JavaScript] 函数同名问题

存在同名函数时,最后的函数会覆盖掉以前的同名函数。 1 var x 1,2 y z 0;3 function add(n) {4 return n n 1;5 }6 y add(x);7 function add(n) {8 return n n 3;9 } 10 z add(x); 11 console.log(x);//x值未变1 12 console.log(y…

湖北汽车工业学院c语言程序设计 汽车零部件采购管理程序,湖北汽车工业学院c语言课程设计实验报告(采购信息管理系统).docx...

湖北汽车工业学院c语言课程设计实验报告(采购信息管理系统)C语言课程设计  商品销售信息管理系统  #include  #include  #include  #include  structproduct//定义商品数据结构  {  intnum;//商品编号  charproductname[20];//商品名称  floatprice;//商品…

通信系统概论_现代通信系统概论 第一章 概述(1)

2020年,又开始上一门新课!!!喜欢挑战!让同学们开阔知识是本课程的主要目的!本课程讲解导航、遥控遥测等军用尖端技术和数字电话、广播电视、综合信息网、多媒体宽带网等现代民用技术。通信在过去分为模拟通…

安装CentOS6.2操作系统

原创作品,出自 “深蓝的blog” 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任。 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/40131523 说明:因为之前有相关安装文章能够查…

c语言100阶乘的代码,求10000的阶乘(c语言代码实现)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*程序功能:计算一个正整数n的阶乘,目前最大能运算10000的阶乘,可秒杀。程序意义:加强自己对于大数的处理。说明:此程序对乘法和除法还未做任何优化,如果用上位…

perl学习之:函数总结

一、进程处理函数 1、进程启动函数函数名 eval 调用语法 eval(string) 解说 将string看作Perl语句执行。正确执行后,系统变量$为空串,如果有错误,$中为错误信息。 例子 $print "print (\"hello,world\\n\");";eval ($pr…

jsp做看板_如何使用看板做敏捷开发

在软件开发实践和互联网的发展中,一直有新的工作方法论不断涌出,有不少的先行者在积极地探索着。敏捷方法和精益方法正是近十几年来,从这波潮流中涌现的最精彩夺目的两项成果。敏捷方法和精益方法的大伞,覆盖多种软件开发方法学&a…

在用c语言写代码是这么找出错误,写代码(C语言)常见粗心小错误

打码(C语言)常见粗心小错误标签(空格分隔): 博客自我介绍本人学院 (http://sdcs.sysu.edu.cn/) 欢迎访问本人学号 16340213目录##1.前言小萌新们是不是经常打完码之发现程序运行达不到自己的效果,然后自己用大脑运行的时候发现完全没有问题,然…

Analyzer报表结果行

隐藏结果(统计)行 (注:在Analyzer设置只是临时起作用,如果要使设置一直生效,则要通过Query Designer进行设置) 显示多个值:如果结果只是由一条记录汇总得来的,则在该列上…

jeecg输入中文查询导表为空_简单查询

语法1.sql以 ; 结尾2.sql不区分关键字大小写3.输入符号时候只能使用英文4.列名不加引号基本查询语句1. select 列名,列名from 表名;2. select *from 表名;3. select 列名 as 列名重命名, 列名 as 列名重命名2from 表名;4. select distinct 列名from 表名;注意事项: …

code128条码c语言,C#生成code128条形码的方法

本文实例讲述了物流条形码的C#实现方法,分享一下供大家参考。具体实现方法如下:主要功能代码如下:using System;using System.Collections.Generic;using System.Data;using System.Drawing;namespace Code{class BarCode{public class Code1…

USACO Section 4.2 Drainage Ditches(最大流)

最大流问题。ISAP算法。注意可能会有重边&#xff0c;不过我用的数据结构支持重边。距离d我直接初始化为0&#xff0c;也可以用BFS逆向找一次。-----------------------------------------------------------------------#include<cstdio>#include<iostream>#inclu…

chipsel语言_用VHDL语言对FPGA和CPLD器件进行开发时应注意的事项

第25卷第4期苏 州 大 学 学 报(工 科 版)Vol.25No.4 2005年8月JOURNA L OF SOOCH OW UNIVERSIT Y(ENGINEERING SCIENCE E DITION)Aug.2005文章编号:1673-047X(2005)04-0031-02用VHDL语言对FPGA和CPLD器件进行开发时应注意的事项Ξ刘文杰(苏州大学机电工程学院,江苏苏州2…

乐高收割机器人_学习乐高机器人编程,孩子到底收获了什么?

孩子是每个家庭的希望&#xff0c;教育影响着孩子的未来。面对各种辅导班兴趣班&#xff0c;家长们一定会感觉到眼花缭乱。相信对于每一位家长来说&#xff0c;报课外班最关心的问题就是在孩子到底在这里可以收获什么&#xff1f;今天小贝来告诉您&#xff0c;在“贝尔机器人活…

android手机定位p适配,Android 9(P)版本适配指南

一、针对所有应用的行为变更隐私权变更1、后台对传感器的访问受限Android 9 限制后台应用访问用户输入和传感器数据的能力。 如果您的应用在运行 Android 9 设备的后台运行&#xff0c;系统将对您的应用采取以下限制&#xff1a;您的应用不能访问麦克风或摄像头。使用连续报告模…