PCA算法Python实现
源代码:
1 #-*- coding: UTF-8 -*- 2 from numpy import * 3 import numpy 4 def pca(X,CRate): 5 #矩阵X每行是一个样本 6 #对样本矩阵进行中心化样本矩阵 7 meanValue=mean(X,axis=0)#计算每列均值 8 X=X-meanValue#每个维度元素减去对应维度均值 9 #协方差矩阵 10 C=cov(X,rowvar=0) 11 #特征值,特征向量 12 eigvalue,eigvector=linalg.eig(mat(C))#特征值,特征向量 13 #根据贡献率,来决定取多少个特征向量构成变换矩阵 14 sumEigValue=sum(eigvalue)#所有特征值之和 15 sortedeigvalue= numpy.sort(eigvalue)[::-1] #对特征值从大到小排序 16 for i in range(sortedeigvalue.size): 17 j=i+1 18 rate=sum(eigvalue[0:j])/sumEigValue 19 if rate>CRate: 20 break 21 #取前j个列向量构成变换矩阵 22 indexVec=numpy.argsort(-eigvalue) #对covEigenVal从大到小排序,返回索引 23 nLargestIndex=indexVec[:j] #取出最大的特征值的索引 24 T=eigvector[:,nLargestIndex] #取出最大的特征值对应的特征向量 25 newX=numpy.dot(X,T)#将X矩阵降维得到newX 26 return newX,T,meanValue#返回降维后矩阵newX,变换矩阵T,每列的均值构成的数组