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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM