较大规模数据应用PCA降维的一种方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机工程应用技术
本栏目责任编辑:梁
书
较大规模数据应用PCA 降维的一种方法
赵桂儒
(中国地震台网中心,北京100045)
摘要:PCA 是一种常用的线性降维方法,但在实际应用中,当数据规模比较大时无法将样本数据全部读入内存进行分析计
算。文章提出了一种针对较大规模数据应用PCA 进行降维的方法,该方法在不借助Hadoop 云计算平台的条件下解决了较大规模数据不能直接降维的问题,实际证明该方法具有很好的应用效果。关键词:主成分分析;降维;大数据中图分类号:TP311
文献标识码:A
文章编号:1009-3044(2014)08-1835-03
A Method of Dimensionality Reduction for Large Scale Data Using PCA ZHAO Gui-ru
(China Earthquake Networks Center,Beijing 100045,China)
Abstract:PCA is a general method of linear dimensionality reduction.It is unable to read all the sample data into the memory to do analysis when the data scale becomes large.A method of dimensionality reduction for large scale data using PCA without Ha⁃doop is proposed in this paper.This method solves the problem that it can ’t do dimensionality reduction directly on large scale data.Practice proves that this method has a good application effect.Key words:PCA;dimensionality reduction;large scale data
现实生活中人们往往需要用多变量描述大量的复杂事物和现象,这些变量抽象出来就是高维数据。高维数据提供了有关客观现象极其丰富、详细的信息,但另一方面,数据维数的大幅度提高给随后的数据处理工作带来了前所未有的困难。因此数据降维在许多领域起着越来越重要的作用,通过数据降维可以减轻维数灾难和高维空间中其他不相关属性。所谓数据降维是指通过线性或非线性映射将样本从高维空间映射到低维空间,从而获得高维数据的一个有意义的低维表示的过程。
主成分分析(Principal Component Analysis ,PCA )是通过对原始变量的相关矩阵或协方差矩阵内部结构的研究,将多个变量转换为少数几个综合变量即主成分,从而达到降维目的的一种常用的线性降维方法。这些主成分能够反映原始变量的绝大部分信息,它们通常表示为原始变量的线性组合。在实际应用中当数据规模超过计算机内存容量(例如16G)时就无法将样本数据全部读入内存来分析原始变量的内部结构,这成为PCA 在实际应用中存在的一个问题。该文从描述PCA 变换的基本步骤出发,提出了一种不需要Hadoop 等云计算平台即可对较大规模数据进行降维的一种方法,实际证明该方法具有很好的应用效果。
1PCA 变换的基本步骤
PCA 是对数据进行分析的一种技术,主要用于数据降维,方法是利用投影矩阵将高维数据投影到较低维空间。PCA 降维的一般步骤是求取样本矩阵的协方差矩阵,计算协方差矩阵的特征值及其对应的特征向量,由选择出的特征向量构成这个投影矩阵。
æèççççççöø
÷÷÷÷÷÷cov(x 1,x 1),cov(x 1,x 2),cov(x 1,x 3),⋯,cov(x 1,x N )cov(x 2,x 1),cov(x 2,x 2),cov(x 2,x 3),⋯,cov(x 2,x N ) ⋮cov(x N ,x 1),cov(x N ,x 2),cov(x N ,x 3),⋯,cov(x N ,x N )(1)假设X M ×N 是一个M ×N (M >N ),用PCA 对X M ×N 进行降维分析,其步骤为:1)将矩阵X M ×N 特征中心化,计算矩阵X M ×N 的样本的协方差矩阵C N ×N ,计算出的协方差矩阵如式(1)所示,式中x i 代表X M ×N
特征中心化后的第i 列;
2)计算协方差矩阵C N ×N 的特征向量e 1,e 2...e N 和对应的特征值λ1,λ2...λN ,将特征值按从大到小排序;
3)根据特征值大小计算协方差矩阵的贡献率及累计贡献率,计算公式为:
θi =λi
∑n =1
N
λn
i =1,2,...,N (2)
收稿日期:2014-01-20基金项目:国家留学基金资助项目(201204190040)作者简介:赵桂儒(1983-),男,山东聊城人,工程师,硕士,迈阿密大学访问学者,主要研究方向为多媒体信息处理。
1835
Computer Knowledge and Technology 电脑知识与技术第10卷第8期(2014年3月)
计算机工程应用技术
本栏目责任编辑:梁书
Θr =∑i =1
r θi
r =1,2...N (3)
式中,θi 为协方差矩阵C N ×N 第i 列向量的贡献率,Θr 为协方差矩阵前r 列矩阵的累计贡献率。
4)根据累计贡献率Θr 的大小确定投影矩阵的维数r ,其中r ≤n ;5)按从大到小取前r 个特征值对应的特征向量作为投影矩阵S N ×r ,将需要降维的矩阵X M ×N 与投影矩阵S N ×r 相乘,得到降维
后的矩阵T M ×r .
2较大规模数据应用PCA 降维的方法
在实际应用中,一般的计算机平台的内存容量有限(例如16G),但当数据规模往往比较大(几十、上百G),这时无法将样本数据
全部读入内存来进行计算,这成为PCA 降维方法在实际应用中存在的一个问题。通过分析第1部分的PCA 降维步骤可以发现,对数据进行降维时最关键的步骤是计算样本数据的协方差矩阵,该文设计了一种应用PCA 对较大规模数据降维时求取协方差矩阵的方法,具体方法是:将特征中心化后的样本数据X M ×N 按列(x 1,x 2...x N )分别存放在不同文件中,分别读取文件x i 和文件x j 计算第i 列x i 和第j 列x j 的协方差cov(x i ,x j )。因为C N ×N 为对称矩阵,也即cov(x i ,x j )与cov(x j ,x i )相等,因此只需计算C N ×N 的上三角矩阵,
对应填充下三角矩阵即可。一个循环遍历计算协方差的算法描述如下:
For(i=k;i<=k;i++){
读取文件x i ;
计算并输出cov(x i ,x j );For(j=k+1;j<=N;j++)读取文件x j ;计算并输出cov(x i ,x j )=cov(x j ,x i );
释放文件x j ;
}
算法中k 的取值从1到N ,共遍历N 次,由于每次遍历只计算了协方差矩阵的一部分,为了最终得出如式(1)所示的协方差矩阵,设置第i 次遍历(即k =i )的输出结果如式(4)所示。
最终将N 次遍历的协方差矩阵按对应位置累加即可得出如式(1)所示的协方差矩阵。
æèççççççççççöø
÷÷÷
÷÷÷÷÷÷÷ 0 0 cov(x i ,x i ),cov(x i ,x i +1),⋯,cov(x i ,x N ) cov(x i +1,x i ) 0 cov(x i +2,x i ) 0 ⋮ cov(x N ,x i ) (4)
计算出协方差矩阵后即可按照第1部分的后续步骤进行数据降维工作,其中第1部分的步骤(5)中X M ×N 与S N ×r 相乘时可按行读取X M ×N 分别与S N ×r 相乘,从而避免无法将数据一次读入内存的问题。
3算法分析
1)按列分割文件
将文件按列存放是文章第2部分提出的算法的前提,一个在Linux 环境下按列分割文件的shell 脚本程序如下:#!/bin/bash i=1
while [$i -le $1]do
awk -F,-v j=$i '{print $j>>j".txt"}'$2((i=i+1))done
程序需要$1和$2两个输入参数,分别是需要分割文件的列数和和文件名,分割后将按列存放为1.txt 、2.txt 等等。2)算法性能
文中第2部分提出的算法主要针对数据增长到一定规模(例如几十G)的时候,无法将全部数据一次性读入内存从而计算协方差矩阵的情况而提出的。算法采取分批读取数据的方式分别计算协方差,需要N 次遍历,其中k 值取1时运行时间最长,需要读取N 个文件和计算N 次协方差,k 值取N 时运行时间最短,只需读取一次文件和计算一次协方差。算法的缺点是运行的时间比直接读取数据计算协方差要长,优点是解决了较大规模数据不能直接降维的问题。为了提高运算速度可在服务器上提交N 个进程或在超算平台中提N 个任务的方法并行执行N 次遍历程序。
1836