使用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=1
20     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為重構的數據集;繪出原始數據和降維后的數據圖如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM