首页 > 代码库 > 使用python利用pca对数据降维处理

使用python利用pca对数据降维处理

下面写下用pca对数据进行降维处理的过程:

Python源代码如下:

 1 from numpy import *; 2 def loadDataSet(fileName,delim=\t): 3     # 打开文件 4     fr=open(fileName); 5     """ 6 >>> line0=fr.readlines(); 7 >>> type(line0) 8 <class ‘list‘> 9 >>> line0[0]10 ‘10.235186\t11.321997\n‘11     """12     stringArr=[line.strip().split(delim) for line in fr.readlines()];13     # map函数作用于给定序列的每一个元素,并用一个列表来提供返回值14     datArr=[list(map(lambda x:float(x),line)) for line in stringArr];15     dataMat=mat(datArr);16     return dataMat;17 18 def pcaFun(dataMat,topNfeat=9999999):19     # 计算每列的平均值axis=0,计算每行的平均值axis=120     meanVals=mean(dataMat,axis=0);21     # 去平均值,shape(dataMat)=(1000, 2),shape(meanVals)=(1, 2)22     meanRemoved=dataMat-meanVals;# 可以直接对两个维度不同的矩阵进行运算23     # 计算协方差矩阵shape(covMat)=(2, 2)24     covMat=cov(meanRemoved,rowvar=0);25     # 计算协方差矩阵的特征值和特征向量26     eigVals,eigVects=linalg.eig(mat(covMat));27     # 对特征值按升序排序28     eigValInd=argsort(eigVals);29     # 对特征值进行逆序排序30     eigValInd=eigValInd[:-(topNfeat+1):-1];31     # 计算最大特征值对应的特征向量32     redEigVects=eigVects[:,eigValInd];33     # 计算降维之后的数据集34     lowDDataMat=meanRemoved*redEigVects;35     # 重构原始数据36     reconMat=(lowDDataMat*redEigVects.T)+meanVals;37     return lowDDataMat,reconMat;38 39 import matplotlib.pyplot as plt;40 # 绘图,绘出原始数据和降维后的数据41 def plotData(dataMat,reconMat):42     # import matplotlib;43     # import matplotlib.pyplot as plt;44     fig=plt.figure();45     ax=fig.add_subplot(111);46     ax.scatter(dataMat[:,0].flatten().A[0],dataMat[:,1].flatten().A[0],marker=^,s=90);47     ax.scatter(reconMat[:,0].flatten().A[0],reconMat[:,1].flatten().A[0],marker=o,s=50,c=red);48     plt.show();

上面代码中lowDDataMat为降维后的数据集,reconMat为重构的数据集;绘出原始数据和降维后的数据图如下:

 

 

使用python利用pca对数据降维处理