十二 python-pca

pca的学习

1 pca的推导

pca用来对数据进行简化,它的思想是数据中能够提供较大信息量的特征才是需要注意的特征,而提供很少信息量的特征是各种波动的误差带来的,应该剔除

而在数据个方向上的信息量可以用方差量表示,方差越大证明数据在这个方向上差别越大,能够带来跟多的信息

原始数据 D ,单位方向向量 v
为了方便计算,对D进行去中心化:
这里写图片描述
方差计算公式为:
这里写图片描述
而协方差 :
这里写图片描述
因此 :
这里写图片描述
优化问题转化为:
这里写图片描述
利用拉格朗日方程求得v得最优解:
这里写图片描述
因为v时单位方向向量,因此λ可以看作是协方差矩阵v方向上的特征值
将等式带回目标函数
这里写图片描述
由此可知,数据某特征的信息量为该特征方向上特征值,特征值越大,信息量越大

2 代码

def pca(datamat,topN):
    meandata=mean(datamat,axis=0) #求数据的均值
    meanremove=datamat-meandata  #数据去中心化
    covmat=cov(meanremove,rowvar=False) #计算协方差
    k,arr=linalg.eig(mat(covmat)) #计算特征值和特征向量
    List=argsort(-k) #特征值从大到小排列,返回索引
    k=k[List] 
    arr=arr[:,List] #特诊向量重排
    k=k[:topN] #最大的topN个特征值
    arr=arr[:,:topN] #最大的topN个特征值对应的特征向量
    newdata=meanremove*arr #将数据转换到新空间

    redata=newdata*arr.T+meandata #重构数据
    return k,arr,redata,newdata

猜你喜欢

转载自blog.csdn.net/qq_35282560/article/details/79480088