PCA的实现

#!/usr/bin/python2
#-*-coding:UTF-8-*-

from numpy import *

#整个PCA的实现中,是约定所有的数据记录中不含有标签的,因此,在调用之前,标签应该另做存放
#The centralize function change the dataSet in the original position
def centralize(dataSet):    #The dataSet must be of array type
    meanRow=mean(dataSet,axis=0,keepdims=False)
    dataSet-meanRow
    return dataSet,meanRow

def getCov(dataSet):        #Get the cov matrix
    return cov(dataSet,rowvar=0)

def getEigValsVects(covMat):    #The covMat object must be of matrix type !
    eigVals,eigVects=linalg.eig(covMat)
    return eigVals,eigVects

def selectEigValsVects(eigVals,eigVects,num):
    valIndices=argsort(eigVals)
    valIndices=valIndices[-1::-1]
    selectIndices=valIndices[:num]
    selectVals=eigVals[selectIndices]
    selectVects=eigVects[:,selectIndices]
    return selectVals,selectVects

def percent2Num(eigVals,percent):
    sortedEigVals=sort(eigVals)
    sortedEigVals=sortedEigVals[-1::-1]
    valSum=sum(sortedEigVals)
    tempSum=0.0
    for i in range(len(sortedEigVals)):
        tempSum+=sortedEigVals[i]
        if tempSum>percent*valSum:
            return i+1

def pca(dataSet,percent):
    dataSet,meanRow=centralize(dataSet)
    covSet=getCov(dataSet)
    eigVals,eigVects=getEigValsVects(mat(covSet))
    valNum=percent2Num(eigVals,0.95)
    selectVals,selectVects=selectEigValsVects(eigVals,eigVects,valNum)
    newDataSet=dataSet*selectVects
    return newDataSet


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值