主成分分析(PCA)

作者:小小谷 | 创建时间: 2023-07-25
主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。在统计学中,主成分分析(principal components analysis,PCA)是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的...
主成分分析(PCA)

操作方法

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

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

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

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

import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt from 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=1 data=zeros((1000,3)) data[:,0]=a data[:,1]=b data[:,2]=c m=mean(data,axis=0) s=std(data,axis=0) data=(data-m)/s c=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)*s fig=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() 代码演示,如上。包括数据生成的方法。

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

温馨提示

k值得选择对结果影响较大
点击展开全文

更多推荐