python求特征值函数,python求特征值和特征向量

特征值,特征向量,标准正交向量组与numpy

使用python的数值计算库numpy来计算矩阵的特征值,特征向量与标准正交向量组

创新互联是专业的高邑网站建设公司,高邑接单;提供成都网站设计、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行高邑网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

1.求矩阵 的特征值和各特征值所对应的特征向量

2.求矩阵 的特征值和各特征值所对应的特征向量

3.由向量组 构造一组标准正交向量组

python求特征值和特征向量

拍子在求特征值和特征向量的过程中,你可以一定要变成这些正确编写,正确之后的话就能够直接出来了。

python pca怎么得到主成份

一般步骤来实现PCA算法

(1)零均值化

假如原始数据集为矩阵dataMat,dataMat中每一行代表一个样本,每一列代表同一个特征。零均值化就是求每一列的平均值,然后该列上的所有数都减去这个均值。也就是说,这里零均值化是对每一个特征而言的,零均值化都,每个特征的均值变成0。实现代码如下:

[python] view plain copy

def zeroMean(dataMat):

meanVal=np.mean(dataMat,axis=0)     #按列求均值,即求各个特征的均值

newData=dataMat-meanVal

return newData,meanVal

函数中用numpy中的mean方法来求均值,axis=0表示按列求均值。

该函数返回两个变量,newData是零均值化后的数据,meanVal是每个特征的均值,是给后面重构数据用的。

(2)求协方差矩阵

[python] view plain copy

newData,meanVal=zeroMean(dataMat)

covMat=np.cov(newData,rowvar=0)

numpy中的cov函数用于求协方差矩阵,参数rowvar很重要!若rowvar=0,说明传入的数据一行代表一个样本,若非0,说明传入的数据一列代表一个样本。因为newData每一行代表一个样本,所以将rowvar设置为0。

covMat即所求的协方差矩阵。

(3)求特征值、特征矩阵

调用numpy中的线性代数模块linalg中的eig函数,可以直接由covMat求得特征值和特征向量:

[python] view plain copy

eigVals,eigVects=np.linalg.eig(np.mat(covMat))

eigVals存放特征值,行向量。

eigVects存放特征向量,每一列带别一个特征向量。

特征值和特征向量是一一对应的

(4)保留主要的成分[即保留值比较大的前n个特征]

第三步得到了特征值向量eigVals,假设里面有m个特征值,我们可以对其排序,排在前面的n个特征值所对应的特征向量就是我们要保留的,它们组成了新的特征空间的一组基n_eigVect。将零均值化后的数据乘以n_eigVect就可以得到降维后的数据。代码如下:

[python] view plain copy

eigValIndice=np.argsort(eigVals)            #对特征值从小到大排序

n_eigValIndice=eigValIndice[-1:-(n+1):-1]   #最大的n个特征值的下标

n_eigVect=eigVects[:,n_eigValIndice]        #最大的n个特征值对应的特征向量

lowDDataMat=newData*n_eigVect               #低维特征空间的数据

reconMat=(lowDDataMat*n_eigVect.T)+meanVal  #重构数据

return lowDDataMat,reconMat

代码中有几点要说明一下,首先argsort对特征值是从小到大排序的,那么最大的n个特征值就排在后面,所以eigValIndice[-1:-(n+1):-1]就取出这个n个特征值对应的下标。【python里面,list[a:b:c]代表从下标a开始到b,步长为c。】


网站栏目:python求特征值函数,python求特征值和特征向量
分享URL:http://pwwzsj.com/article/dscidch.html