主成分分析可以利用什么求解主成分,主成分分析中的主成分
主成分分析的基本概念主成分分析(PCA)是一种统计方法。通过正交变换,将一组可能相关的变量转换成一组线性无关的变量,转换后的变量称为主成分。
主成分分析的意义对于一组数据X,有以下特征{x1,x2,x3},这些特征之间可能存在一定的相关性。主成分分析是利用代表数据之间相关性的协方差矩阵,去除数据的相关性,找到一组数据中最关键的元素。
举个简单的例子,比如一群深海鱼的数据,包括长度、体重、游速、体温等等。但是如果我们用这些数据来描述一条深海鱼,那就太复杂了。显然,即使以我们先验的感官,也能看出鱼的长度和体重两组数据是高度重合的,体长的鱼必然重。那么能不能结合这两种鱼的特点呢?对于数据的分析,少一个数据就要把整个数据的空间减少一个维度。
协方差矩阵是主成分分析中使用的数学工具,通过将标准化特征矩阵的转置与其自身相乘来获得。它是一个对角矩阵,用来表示特征之间的相关性。
有特征向量的矩阵的特征向量表示的是与这个矩阵相乘后只改变长度而不改变方向的向量,特征值就是这些向量与矩阵相乘后的变化程度。所以求矩阵的特征向量本质上就是把矩阵分解成相互独立、正交的向量,特征值就是这些向量对矩阵本身的重要程度(或者说这个特征向量代表矩阵的能力)。
主成分分析原理主成分分析是一种利用协方差矩阵的特征值和对应的特征向量,保留特征值大的特征向量,去掉一些对数据影响不大的维度的数据降维方法。有四个主要步骤:
1.将数据标准化,使每个特征的平均值为0,方差为1。
2.求特征矩阵的协方差矩阵cov。
3.求cov矩阵的特征值和特征向量,去掉特征值过小的特征向量,得到修剪向量组p。
4.将修剪后的向量与原特征向量相乘Y=XP,得到降维后的数据。
Python实现import numpy为npx=np.array ([[-1,1,3],[5,5,4],[3,2,2]]) k=2n _ sample,n _ feature=x.shape #获取样本数和特征数#求平均值,标准差,矩阵标准化ave=0)x=x-ave for I in range(n _ feature):s=NP . STD(x[:i]) x [:i]=x [:i]/s #计算协方差矩阵CoV=x)/(n _ Vecs=np.linalg.eig(cov)#求最大特征值和特征向量sum=sum(vals)#求主分量p=np.array(vecs[:0: k])对于区间内的j(k):对于区间内的I(n _ feature):if valves[I]==NP . max(valves):a=I print(valves[a]/sum)print(Vecs[:a]) valves [a]=0
0.7729122102088408(第一维特征值)
[-0.56681041 -0.65559717 -0.49891713]
0.22708778979115923(第二维特征值)
[-0.61186447 -0.07053338 0.78781147]
修整后的特征矩阵是
[[ 1.40029819 0.88680196]
[-2.1170043 0.21392828]
[ 0.71670611 -1.10073025]]
可以看到减少了一个特征,最后一个特征的影响只有10-17的量级。