Numpy中怎么实现PCA

68次阅读
没有评论

共计 1919 个字符,预计需要花费 5 分钟才能阅读完成。

本篇内容主要讲解“Numpy 中怎么实现 PCA”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“Numpy 中怎么实现 PCA”吧!

Numpy 中实现 PCA

from numpy import *

 fr = open(fileName)  stringArr = [line.strip().split(delim) for line in fr.readlines()]  datArr = [map(float,line) for line in stringArr]  return mat(datArr) def pca(dataMat, topNfeat=9999999):  meanVals = mean(dataMat, axis=0) # 计算列均值  print meanVals # [[ 9.06393644 9.09600218]]  print  ======  meanRemoved = dataMat - meanVals #remove mean #  每一列都减去均值  covMat = cov(meanRemoved, rowvar=0) #  计算新矩阵 (减去均值) 协方差  print covMat # [ [ 1.05198368 1.1246314 ]  [ 1.1246314 2.21166499]  ]    # 协方差  print  ======  eigVals,eigVects = linalg.eig(mat(covMat)) # 计算协方差矩阵的特征值和特征向量  print eigVals # [ 0.36651371 2.89713496]  print  ======  print eigVects # [ [-0.85389096 -0.52045195]  [ 0.52045195 -0.85389096]  ]   print  ======  eigValInd = argsort(eigVals) # 按照特征值从大到小排序。选择 topN  eigValInd = eigValInd[:-(topNfeat+1):-1]   redEigVects = eigVects[:,eigValInd]   print redEigVects  print  ======  #[ [-0.52045195]  [-0.85389096]  ]  lowDDataMat = meanRemoved * redEigVects # N x 2 * 2 x 1 ==  N x 1    即把 N  x 2 的矩阵转化成 N  x 1  的矩阵,维度降到 1    reconMat = (lowDDataMat * redEigVects.T) + meanVals  return lowDDataMat, reconMat

均值: mean(X) = (x0 + x1 + … + xn) / n

标准差:std = Math.sqrt([x0 – mean(x)]^2/(n-1),2)

方差:var=[x0 – mean(x)]^2/(n-1)

比如两个集合[0,8,12,20]、[8,9,11,12] 均值都是 10. 但是两个集合的差别很大。计算两个标准差,前者是 8.3 和后者是 1.8.

显示后者比较集中。标准差描述了数据的“散布度”。之所以除以 n - 1 而不是 n。是因为能使我们以较小的样本更好的逼近总体的标准差。即“无偏估计”

为什么需要协方差?

标准差和方差一般是用来描述一维的数据。但是现实生活中,我们常常遇到含有二维数据的数据集。最简单的是大家上学免不了的统计多个学科的考试成绩。多维数据之间的关系。协方差就是这样一种度量两个随机变量关系的统计量

var(X) = {Math.pow(xi-mean(X),2)}/(n-1) = {xi-mean(X)}{xi-mean(X)}/(n-1)

仿照方差的定义:

cov(X,Y)= {xi-mean(X)}{yi-mean(Y)}/(n-1)

来度量各个维度偏离其均值的程度。

协方差结果的意义:

如果是正值,则说明两者是正相关,如果结果是负值,则说明两者是负相关。如果是 0,表示两者没有关联,相互独立。

多维协方差:矩阵来表示

 cov(x,x) cov(x,y) cov(x,z)

C=cov(y,x) cov(y,y) cov(y,z)      === 可见协方差矩阵是一个对称矩阵,而且对角线是各个维度的方差。是 3 *3

 cov(z,x) cov(z,y) cov(z,z)

到此,相信大家对“Numpy 中怎么实现 PCA”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计1919字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)