这段时间因需要用新特征做变换,而不是直接使用原始数据,且原始数据维度太高,故想到PCA降维后再进行操作,这个过程中遇到了一些问题,特此记录,方便自己也方便大家参考。
一、PCA数学理论:
关于PCA的理论,资料很多,公式也一大把,本人功底有限,理论方面这里就不列出了。下面主要从应用的角度大概来讲讲具体怎么实现数据集的降维。
- 把原始数据中每个样本用一个向量表示,然后把所有样本组合起来构成一个矩阵。当然了,为了避免样本的单位的影响,样本集需要标准化。
- 求该矩阵的协方差矩阵(参考http://www.cnblogs.com/tornadomeet/archive/2012/04/09/2438505.html)。
- 求步骤2中得到的协方差矩阵的特征值和特征向量。
- 将求出的特征向量按照特征值的大小进行组合形成一个映射矩阵,并根据指定的PCA保留的特征个数取出映射矩阵的前n行或者前n列作为最终的映射矩阵。
- 用步骤4的映射矩阵对原始数据进行映射,达到数据降维的目的。
二、遇到的问题
1.关于样本矩阵的组成方式
每个样本都可以看成是一个1*m的行向量,假如有n个样本,则构成的样本矩阵sample维数是n*m,这时,矩阵中每一行代表一个样本,而每一列代表在该维度上n个样本各自的分布情况,因此,在求去除平均值的矩阵meansample时,要对每一列求得平均值,会得到一个1*m的行向量,然后对sample每一行剪掉这个1*m的行向量,这样就可以得到meansample矩阵了。
2.协方差矩阵的构成
大家都知道,利用PCA求特征时,最重要的一步就是要得到样本矩阵的协方差矩阵,从而得到它的特征向量矩阵,根据特征值贡献的不同舍弃部分特征向量后作为投影矩阵,通过对原始数据映射,进而获取了降维后的特征,可用于做分类和识别。如果要查看滤去次要特征后的数据,需要根据降维后的投影矩阵进行反变换,该部分还未研究(http://www.cnblogs.com/tornadomeet/archive/2012/09/06/2673104.html)。
1.关于样本矩阵的组成方式
每个样本都可以看成是一个1*m的行向量,假如有n个样本,则构成的样本矩阵sample维数是n*m,这时,矩阵中每一行代表一个样本,而每一列代表在该维度上n个样本各自的分布情况,因此,在求去除平均值的矩阵meansample时,要对每一列求得平均值,会得到一个1*m的行向量,然后对sample每一行剪掉这个1*m的行向量,这样就可以得到meansample矩阵了。
2.协方差矩阵的构成
大家都知道,利用PCA求特征时,最重要的一步就是要得到样本矩阵的协方差矩阵,从而得到它的特征向量矩阵,根据特征值贡献的不同舍弃部分特征向量后作为投影矩阵,通过对原始数据映射,进而获取了降维后的特征,可用于做分类和识别。如果要查看滤去次要特征后的数据,需要根据降维后的投影矩阵进行反变换,该部分还未研究(http://www.cnblogs.com/tornadomeet/archive/2012/09/06/2673104.html)。
而协方差矩阵的得来是有一些讲究的,协方差是一种用来度量两个随机变量关系的统计量,可表示为:
而对于协方差矩阵,n维的数据集就需要计算个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义:
这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有