python--numpy实现pca算法
Coding by Chang,2017/4/28
编程环境:python27,
依赖库:numpy,
实现算法:主成分分析(pca)
代码实现:
#!/usr/bin/python # -*- coding:utf-8 -*- from numpy import * def loadDataSet(fileName,delim='\t'): fr=open(fileName) #strip()去掉line中所有换行符,split('\t')以'\t'切割 stringArr=[line.strip().split(delim) for line in fr.readlines()] #读取文件完成分割 dataArr=[map(float,line) for line in stringArr] #python36中的map回出现问题 return mat(dataArr) #转换为matrix格式返回 def pca(dataMat,topNfea=9999999): meanVals=mean(dataMat,axis=0) #mean()求均值 meanRemoved=dataMat-meanVals covMat=cov(meanRemoved,rowvar=0) #cov()求协方差矩阵 eigVals,eigVects=linalg.eig(mat(covMat)) #numpy.linalg库中提供了eig()函数求解特征值和特征向量 eigValInd=argsort(eigVals) eigValInd=eigValInd[:-(topNfea+1):-1] #取最大的topNfea个最大特征值 redEigVects=eigVects[:,eigValInd] #取对应的特征向量,组成转换矩阵redEigVects lowDDataMat=meanRemoved*redEigVects #实现降维 reconMat=(lowDDataMat*redEigVects.T)+meanVals #重构数据 return lowDDataMat,reconMat #返回降维矩阵和重构矩阵