PCA原理及实现
来源:互联网 发布:淘宝双十一成交额实时 编辑:程序博客网 时间:2024/06/05 09:02
1、数学原理
步骤:
1.用X表示原有数据;
2.零均值化;
3.求协方差矩阵;
4.求特征值和特征向量;
5.根据相应的特征值把特征向量从大到小排序,从组成的矩阵选取K行代表降维的基(K维);
6.降维的基和原有数据X相乘,即为降维后的数据Y
2、MATLAB实现
3、python实现
#pcaimport numpy as npdataMat= np.loadtxt(open(r'G:\训练小样本2.csv',"rb"),delimiter=",",skiprows=0) #零均值化def zeroMean(dataMat): meanVal=np.mean(dataMat,axis=0) #按列求均值,即求各个特征的均值 newData=dataMat-meanVal return newData,meanVal def pca(dataMat,n): #求协方差矩阵 newData,meanVal=zeroMean(dataMat) covMat=np.cov(newData,rowvar=0) #求协方差矩阵,return ndarray;若rowvar非0,一列代表一个样本,为0,一行代表一个样本 #求特征值、特征矩阵 eigVals,eigVects=np.linalg.eig(np.mat(covMat))#求特征值和特征向量,特征向量是按列放的,即一列代表一个特征向量 # print(eigVals) # print(eigVects) #保留主要的成分[即保留值比较大的前n个特征] eigValIndice=np.argsort(eigVals) #对特征值从小到大排序 # print(eigValIndice) n_eigValIndice=eigValIndice[-1:-(n+1):-1] #最大的n个特征值的下标 # print(n_eigValIndice) n_eigVect=eigVects[:,n_eigValIndice] #最大的n个特征值对应的特征向量 print(n_eigVect) lowDDataMat=newData*n_eigVect #低维特征空间的数据 reconMat=(lowDDataMat*n_eigVect.T)+meanVal #重构数据 # print(lowDDataMat) # print(reconMat) return lowDDataMat,reconMat # [newData,meanVal]=zeroMean(dataMat)[a,b]=pca(dataMat,2)# print(a)# print(b)# print(newData)# print(meanVal)
代码解释:
1.newData=dataMat-meanVal
,返回零均值化结果
2.eigVals,eigVects=np.linalg.eig(np.mat(covMat))
,返回矩阵的特征值、特征向量
#特征值[ 4.27623823e+01 4.39882621e+00 1.00919422e+00 1.79586824e-03 1.29584233e-03]#特征向量[[ -2.49078536e-01 9.59959063e-01 1.28022644e-01 -6.97723720e-03 -2.95702270e-05] [ 1.33074844e-02 3.12351351e-02 -1.56277491e-01 9.53854600e-01 2.54137809e-01] [ -8.09197847e-03 -4.41528939e-03 3.14396428e-02 2.62359608e-01 -9.64413817e-01] [ 4.91864942e-02 1.41753127e-01 -9.75180514e-01 -1.45780429e-01 -7.25104921e-02] [ -9.67108061e-01 -2.39561098e-01 -8.49827190e-02 5.31259008e-03 7.88617062e-03]]
3.eigValIndice=np.argsort(eigVals)
特征值从小到大排序
[4 3 2 1 0]
4、n_eigValIndice=eigValIndice[-1:-(n+1):-1]
最大n个特征的索引值(下标)
[0 1]#2维
5.n_eigVect=eigVects[:,n_eigValIndice]
,最大n个特征值的特征向量(取n列,避免了转置步骤)
[[-0.24907854 0.95995906] [ 0.01330748 0.03123514] [-0.00809198 -0.00441529] [ 0.04918649 0.14175313] [-0.96710806 -0.2395611 ]]
6.reconMat=(lowDDataMat*n_eigVect.T)+meanVal #重构数据
参考:
1. PCA的数学原理;
2. python实现PCA
阅读全文
0 0
- PCA原理及实现
- PCA原理及实现
- PCA原理及Python实现
- PCA的原理及MATLAB实现
- PCA数学原理及算法实现
- PCA数学原理及编程实现
- Opencv学习笔记-----PCA原理及OpenCV实现
- PCA algorithm原理及使用
- PCA原理及特征脸
- PCA原理以及算法实现
- PCA原理及其R实现
- PCA(Principal Component Analysis 主成分分析)原理及MATLAB实现
- 眼底图像血管增强与分割--(3)基于PCA的增强算法原理及实现
- 主成分分析(PCA)原理及推导
- 主成分分析(PCA)原理及推导
- 主成分分析(PCA)原理及推导
- PCA原理及人脸识别应用
- PCA原理及人脸识别
- RelativeLayout布局
- 主成成分分析(Principal Component Analysis)
- dllparser
- 编辑右键发送到目录
- jeesite 使用笔记(二) 字段合法性校验
- PCA原理及实现
- 谈谈MySQL存储引擎
- Bootstrap4(五)
- Hibernate 搭建
- GsonFormat threw an uncaught Plugin Exception
- 基于3D卷积神经网络的行为识别:3D Convolutional Neural Networks for Human Action Recognition
- Bootstrap4(六)
- 深入分析 ClassLoader
- Hadoop HDFS高可用性(HA) 部署篇