❶ python pca怎么得到主成份
一般步骤来实现PCA算法
(1)零均值化
假如原始数据集为矩阵dataMat,dataMat中每一行代表一个样本,每一列代表同一个特征。零均值化就是求每一列的平均值,然后该列上的所有数都减去这个均值。也就是说,这里零均值化是对每一个特征而言的,零均值化都,每个特征的均值变成0。实现代码如下:
[python]view plain
defzeroMean(dataMat):
meanVal=np.mean(dataMat,axis=0)#按列求均值,即求各个特征的均值
newData=dataMat-meanVal
returnnewData,meanVal
函数中用numpy中的mean方法来求均值,axis=0表示按列求均值。
该函数返回两个变量,newData是零均值化后的数据,meanVal是每个特征的均值,是给后面重构数据用的。
(2)求协方差矩阵
[python]view plain
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
eigVals,eigVects=np.linalg.eig(np.mat(covMat))
eigVals存放特征值,行向量。
eigVects存放特征向量,每一列带别一个特征向量。
特征值和特征向量是一一对应的
(4)保留主要的成分[即保留值比较大的前n个特征]
第三步得到了特征值向量eigVals,假设里面有m个特征值,我们可以对其排序,排在前面的n个特征值所对应的特征向量就是我们要保留的,它们组成了新的特征空间的一组基n_eigVect。将零均值化后的数据乘以n_eigVect就可以得到降维后的数据。代码如下:
[python]view plain
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#重构数据
returnlowDDataMat,reconMat
代码中有几点要说明一下,首先argsort对特征值是从小到大排序的,那么最大的n个特征值就排在后面,所以eigValIndice[-1:-(n+1):-1]就取出这个n个特征值对应的下标。【python里面,list[a:b:c]代表从下标a开始到b,步长为c。】
❷ python怎么数据进行pca
基本步骤:
对数据进行归一化处理(代码中并非这么做的,而是直接减去均值)
计算归一化后的数据集的协方差矩阵
计算协方差矩阵的特征值和特征向量
保留最重要的k个特征(通常k要小于n),也可以自己制定,也可以选择一个阈值,然后通过前k个特征值之和减去后面n-k个特征值之和大于这个阈值,则选择这个k
找出k个特征值对应的特征向量
将m * n的数据集乘以k个n维的特征向量的特征向量(n * k),得到最后降维的数据。
其实PCA的本质就是对角化协方差矩阵。有必要解释下为什么将特征值按从大到小排序后再选。首先,要明白特征值表示的是什么?在线性代数里面我们求过无数次了,那么它具体有什么意义呢?对一个n*n的对称矩阵进行分解,我们可以求出它的特征值和特征向量,就会产生n个n维的正交基,每个正交基会对应一个特征值。然后把矩阵投影到这N个基上,此时特征值的模就表示矩阵在该基的投影长度。
特征值越大,说明矩阵在对应的特征向量上的方差越大,样本点越离散,越容易区分,信息量也就越多。因此,特征值最大的对应的特征向量方向上所包含的信息量就越多,如果某几个特征值很小,那么就说明在该方向的信息量非常少,我们就可以删除小特征值对应方向的数据,只保留大特征值方向对应的数据,这样做以后数据量减小,但有用的信息量都保留下来了。PCA就是这个原理。
❸ matlab主成份分析法(PCA)提取特征向量代码,请matlab大神帮忙,先谢谢帮忙的人
MATLAB 2009a以后有自带的主成分函数,自己在help里搜 princomp
❹ 求利用PCA提取多光谱图像的特征图像matlab程序,例如提取一个多光谱图像的一个波段或前4个特征图像。
虽然不知道楼主说啥,但看起来很厉害的样子
❺ 采用PCA方法进行鸢尾花数据集的特征提取及分类任务国外研究现状
摘要 PCA算法的必要性
❻ 如何用python实现pca降维
首先2个包:
importnumpyasnp
fromsklearn.decompositionimportPCA
然后一个m x n 的矩阵,n为维度,这里设为x。
n_components = 12 是自己可以设的。
pca=PCA(n_components=12)
pca.fit(x)
PCA(=True,iterated_power='auto',n_components=12,random_state=None,
svd_solver='auto',tol=0.0,whiten=False)
float_formatter=lambdax:"%.2f"%x
np.set_printoptions(formatter={'float_kind':float_formatter})
print'explainedvarianceratio:'
printpca.explained_variance_ratio_
print'cumulativesum:'
printpca.explained_variance_ratio_.cumsum()
❼ 如何用pca做人脸识别 python实现.带客户端的
基于特征脸(PCA)的人脸识别方法
特征脸方法是基于KL变换的人脸识别方法,KL变换是图像压缩的一种最优正交变换。高维的图像空间经过KL变换后得到一组新的正交基,保留其中重要的正交基,由这些基可以张成低维线性空间。如果假设人脸在这些低维线性空间的投影具有可分性,就可以将这些投影用作识别的特征矢量,这就是特征脸方法的基本思想。这些方法需要较多的训练样本,而且完全是基于图像灰度的统计特性的。目前有一些改进型的特征脸方法。
比如人脸灰度照片40x40=1600个像素点,用每个像素的灰度值组成的矩阵代表这个人的人脸。那么这个人人脸就要1600 个特征。拿一堆这样的样本过来做pca,抽取得到的只是在统计意义下能代表某个样本的几个特征。
人脸识别可以采用神经网 络深度学习的思路,国内的ColorReco在这边有比较多的案例。
❽ python如何实现pca分析
[coef,SCORE,latent] = princomp(A);
latentsum = sum(latent);
for i = 1:col%A的总列数
if sum(latent(1:i))/latentsum > threshold%阈值 eg:0.95
tranM = coef(:,1:i);
break;
end
end
B = A* tranM;
❾ matlab中使用快速pca提取特征
1、参数mA代表A的均值,也就是mean(A)。
其实这个参数完全没必要,因为可以从参数A计算得到。
2、解释一下你问的两个语句的含义:
Z=(A-repmat(mA,m,1)); 作用是去除直流成分
T=Z*Z'; 计算协方差矩阵的转置
3、关于函数的调用:
MATLAB统计工具箱中有函数princomp,也是进行主成分分析的(2012b之后有函数pca),基本调用格式:
[pc,score]=princomp(x)
其中,输入参数x相当于你这个函数的A,输出参数score相当于你这里的pcaA,而pc大致相当于你这里的V(符号相反)。具体说明请参考函数的文档。
❿ python pca 特征值怎么求
主要是用来降低数据集的维度,然后挑选出主要的特征。
原理简单,实现也简单。关于原理公式的推导,本文不会涉及,可以参考文献,也可以去Wikipedia,这里主要关注实现,算是锻炼一下自己。