PCA算法作为一种无监督的学习算法,主要用于数据降维、有损数据压缩、特征抽取、数据可视化。
一、PCA算法流程
• 导入数据集X;
• 按列计算数据集X的均值Xmean,然后做差得到X1=X-Xmean;
• 对得到的新矩阵X1作协方差,得到conv;
• 计算协方差conv对应的特征值和特征向量;
• 然后对得到的特征值排序,得到k个最大的特征值,并求出其对应的k个特征向量,并将其作为列向量组成新的特征向量矩阵X2;
• 计算X1*X2得到经过降维的数据集。
二、python代码实现
import numpy as np
from sklearn import datasets
def zeroMean(X):
meanVal=np.mean(X,axis=0)#按列求均值,即求各个特征的均值
newData=X-meanVal
return newData,meanVal
def pca(dataMat,n):
newData,meanVal=zeroMean(dataMat)
covMat=np.cov(dataMat,rowvar=0) #求协方差矩阵,return ndarray;若rowvar非0,一列代表一个样本,为0,一行代表一个样本
eigVals,eigVects=np.linalg.eig(np.mat(covMat))#求特征值和特征向量,特征向量是按列放的,即一列代表一个特征向量
eigValIndice=np.argsort(eigVals) #对特征值从小到大排序
n_eigVal