主成分分析(PCA)

时间:2024-10-12 20:06:51

1、主成分分析的目的在于降维,使用最少的数据来表示一个样本。让方差大的维度或者说特征来代表样本。

主成分分析(PCA)

2、首先需要对数据进行标准化。m=mean(data,axis=0)s=std(data,axis=0)data=(data-m)/s

主成分分析(PCA)

3、获得协方差矩阵,用于计算变量间的关系。获得主要变量及其组合。c=cov(transpose(data))eigvalues,eigvectors=linalg.eig(c)indexes=argsort(eigvalues)indexes=indexes[::-1]eigvectors=eigvectors[:,indexes]eigvalues=eigvalues[indexes]eigvectors=eigvectors[:,:k]

主成分分析(PCA)

4、获得处理后的数据,以及计算方差累计值。x=dot(transpose(eigvectors),transpose(data))y=(transpose(dot(eigvectors,x))+m)*sprint(sum(eigvalues[:k])/sum(eigvalues))

主成分分析(PCA)
主成分分析(PCA)

5、import numpy as npfrom mpl_toolkits.mplot3d import Axes3Dimport m锾攒揉敫atplotlib.pyplot as pltfrom numpy import *x = random.normal(5,.5,1000) y = random.normal(3,1,1000)z=random.normal(0,1,1000)a = x*cos(pi/4) + y*sin(pi/4) b = -x*sin(pi/4) + y*cos(pi/4)c =- z*sin(pi/4) + -y*cos(pi/4)k=1data=zeros((1000,3))data[:,0]=adata[:,1]=bdata[:,2]=cm=mean(data,axis=0)s=std(data,axis=0)data=(data-m)/sc=cov(transpose(data))eigvalues,eigvectors=linalg.eig(c)indexes=argsort(eigvalues)indexes=indexes[::-1]eigvectors=eigvectors[:,indexes]eigvalues=eigvalues[indexes]eigvectors=eigvectors[:,:k]print(sum(eigvalues[:k])/sum(eigvalues))x=dot(transpose(eigvectors),transpose(data))y=(transpose(dot(eigvectors,x))+m)*sfig=plt.figure()ax=fig.add_subplot(111,projection='3d')ax.scatter(y[:,0],y[:,1],y[:,2],c='b',marker='o')ax.set_xlabel('X_label')ax.set_ylabel('Y_label')ax.set_zlabel('Z_label')plt.show()代码演示,如上。包括数据生成的方法。

主成分分析(PCA)

6、可以通过改变k值,变换数据,压缩数据。可视化图形如下。

主成分分析(PCA)
主成分分析(PCA)
主成分分析(PCA)
主成分分析(PCA)
主成分分析(PCA)
© 手抄报圈