主成分分析
主成分分析(Principal Component Analysis,PCA,通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。设法将原来变量重新组合成一组新的互相无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上用来降维的一种方法。
1.准备数据
在这里我们使用sklearn提供的鸢尾花数据集。
import numpy as np
from sklearn import datasets
# 加载鸢尾花数据集中的特征作为原始数据集
def loadIris(self):
data = datasets.load_iris()["data"]
return data
# 标准化数据
def Standard(self,data):
# axis=0按列取均值
mean_vector=np.mean(data,axis=0)
return mean_vector,data - mean_vector
2.计算得到协方差矩阵
def getCovMatrix(self,newData):
# rowvar=0表示数据的每一列代表一个feature
return np.cov(newData,rowvar=0)
# 计算协方差矩阵的特征值和特征向量
def getFValueAndFVector(self,covMatrix):
fValue,fVector = np.linalg.eig(covMatrix)
return fValue,fVector
# 得到特征向量矩阵
def getVectorMatrix(self,fValue,fVector,k):
fValueSort = np.argsort(fValue)
fValueTopN = fValueSort[:-(k + 1):-1]
return fVector[:,fValueTopN]
# 得到降维后的数据
def getResult(self,data,vectorMatrix):
return np.dot(data,vectorMatrix)
3.计算特征值和特征向量
def getFValueAndFVector(self,covMatrix):
fValue,fVector = np.linalg.eig(covMatrix)
return fValue,fVector
# 得到特征向量矩阵
def getVectorMatrix(self,fValue,fVector,k):
fValueSort = np.argsort(fValue)
fValueTopN = fValueSort[:-(k + 1):-1]
return fVector[:,fValueTopN]
4.得到降维后的数据
def getResult(self,data,vectorMatrix):
return np.dot(data,vectorMatrix)