1 #-*- coding: UTF-8 -*- 2 from numpy import * 3 def pca(X,CRate): 4 #矩阵X每行是一个样本 5 #对样本矩阵进行中心化样本矩阵 6 meanValue=mean(X,axis=0)#计算每列均值 7 X=X-meanValue#每个维度元素减去对应维度均值 8 #协方差矩阵 9 C=cov(X,rowvar=0) 10 #特征值,特征向量 11 eigvalue,eigvector=linalg.eig(mat(C))#特征向量和特征值都是降序排列 12 #根据贡献率,来决定取多少个特征向量构成变换矩阵 13 sumEigValue=sum(eigvalue)#所有特征值之和 14 for i in range(eigvalue.size): 15 j=i+1 16 rate=sum(eigvalue[0:j])/sumEigValue 17 if rate>CRate: 18 break 19 #取前j个列向量构成变换矩阵 20 T=eigvector[:,0:j] 21 newX=numpy.dot(X,T)#将X矩阵降维得到newX 22 return newX,T,meanValue#返回降维后矩阵newX,变换矩阵T,每列的均值构成的数组
原文:http://www.cnblogs.com/simon-c/p/4934305.html