通过李航的《统计学习方法》(我愿称之为最强),可以很清晰地知道PCA的证明和各个参数的的定义。
pca主成分求解的过程是:
- 将数据进行标准化处理(均值为0,方差为1(可选))
- 求原样本中n个特征的协方差矩阵
- 对协方差矩阵进行特征值分解,并将特征向量组成的矩阵按照对应特征值的大小顺序进行排序,前 k 个特征向量即为前k个主成分。
所以我们完全可以根据定义去求解pca,在《机器学习实战》上有详细的代码:
'''
Created on Jun 1, 2011
@author: Peter Harrington
'''
from numpy import *
def loadDataSet(fileName, delim='\t'):
fr = open(fileName)
stringArr = [line.strip().split(delim) for line in fr.readlines()]
datArr = [list(map(float, line)) for line in stringArr]
dataMat = mat(datArr)
return dataMat
def pca(dataMat, topNfeat=9999999):
# 首先将对数据进行去中心化
meanVal = mean(dataMat, axis=0)
meanRemoved = dataMat - meanVal
# 计算协方差矩阵
covMat = cov(meanRemoved, rowvar=False) #
# 计算协方差矩阵的特征值和特征向量
eigVals, eigVects = linalg.eig(covMat)
eigValInd = argsort(eigVals) # 从小到大排序
eigValInd