首页 > 代码库 > 使用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对数据降维处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。