日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的python主成分分析实验报告_python进行主成分分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。