基于对主成分分析的大致了解,粗略的实现了添加链接描述中的PCA实例。
import matplotlib.pyplot as plt
import numpy as np
# import sklearn.decomposition as dp
# from sklearn.datasets.base import load_iris
data=np.array([[2.5,2.4],
[0.5,0.7],
[2.2,2.9],
[1.9,2.2],
[3.1,3.0],
[2.3,2.7],
[2,1.6],
[1,1.1],
[1.5,1.6],
[1.1,0.9]
])
#样本中心化
dataAver=np.average(data, axis=0)
print('平均值为:',+dataAver)
dataAdjust=np.empty((10,2))
for i in range(10):
#dataAjust[i,0]=data[i,0]
dataAdjust[i, 0] = data[i, 0] - dataAver[0]
dataAdjust[i, 1] = data[i, 1] - dataAver[1]
print('样本中心化:',+dataAdjust)
#求协方差
cov=np.cov(dataAdjust,rowvar = False)
print("协方差矩阵:",cov)
#求协方差的特征值和特征向量
Eigenvalues,Featurevector=np.linalg.eig(cov)
print("特征值:",Eigenvalues)
print("特征向量:",Featurevector)
#将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。
E=np.argsort(Eigenvalues)
#print("特征值降序排列",Eigenvalues)
max_E=np.max(E)
Max_Eigenvalues=np.array([0],[0])
for i in range(2):
Max_Eigenvalues[i]=Eigenvalues[i,max_E]
print("最大特征值的特征向量",Max_Eigenvalues)
#样本投影到所选取的特征向量上
TransData=np.matmul(dataAdjust,Max_Eigenvalues)
print(TransData)
实验结果:
[[-0.6778734 ]
[-0.73517866]]
[[ 0.69 0.49]
[-1.31 -1.21]
[ 0.39 0.99]
[ 0.09 0.29]
[ 1.29 1.09]
[ 0.49 0.79]
[ 0.19 -0.31]
[-0.81 -0.81]
[-0.31 -0.31]
[-0.71 -1.01]]
array([[-0.82797019],
[ 1.77758033],
[-0.99219749],
[-0.27421042],
[-1.67580142],
[-0.9129491 ],
[ 0.09910944],
[ 1.14457216],
[ 0.43804614],
[ 1.22382056]])
|