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              #返回降维矩阵和重构矩阵

 

posted @ 2017-04-28 10:30  halo_vagabond  阅读(1278)  评论(0编辑  收藏  举报