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,每列的均值构成的数组

 

posted on 2015-11-03 20:29  simon_c  阅读(3509)  评论(1编辑  收藏  举报