多核研究性课题科研论文.docx

上传人:b****4 文档编号:4382249 上传时间:2022-12-01 格式:DOCX 页数:19 大小:491.06KB
下载 相关 举报
多核研究性课题科研论文.docx_第1页
第1页 / 共19页
多核研究性课题科研论文.docx_第2页
第2页 / 共19页
多核研究性课题科研论文.docx_第3页
第3页 / 共19页
多核研究性课题科研论文.docx_第4页
第4页 / 共19页
多核研究性课题科研论文.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

多核研究性课题科研论文.docx

《多核研究性课题科研论文.docx》由会员分享,可在线阅读,更多相关《多核研究性课题科研论文.docx(19页珍藏版)》请在冰豆网上搜索。

多核研究性课题科研论文.docx

多核研究性课题科研论文

LiaoningNormalUniversity

 

开放实验室项目

研究论文

题目:

基于主成分分析的并行程序设计

学院:

计算机与信息技术学院

专业:

计算机科学与技术

班级序号:

6班19号

学号:

20101118050005

学生姓名:

孙蕾

指导教师:

郑晓薇

2012年11月

 

基于主成分分析的并行程序设计

孙蕾

辽宁师范大学计算机与信息技术学院邮编:

116081

摘 要:

通过对统计学中主成分分析法进行研究,了解主成分分析在生产生活中的重要应用性。

经过对主成分计算方法的学习,找到最佳的求解算法,其核心为计算对称矩阵的特征值。

首先编写出计算对称矩阵特征值的串行算法,并计算其运行时间。

为提高其计算效率,在此基础上我利用多核程序设计将其并行化,以优化运行速度,计算加速比。

理解了并行程序设计原理并达到基本能应用的水平,并行程序设计如果能广泛的应用在统计学领域,那么将极大地方便主成分分析法的推广和应用。

 

关键词:

主成分分析、并行程序设计、特征值、加速比。

 

Parallelprogrammingbasedonprincipalcomponentanalysis

SunLei

LiaoningNormalUniversity,CollegeofComputerandInformationTechnologyPostcode:

116081

Abstract:

Theprincipalcomponentanalysisinstatisticalresearchtounderstandtheprincipalcomponentanalysisofimportantapplicationsintheproductionlife.Afterthecalculationoftheprincipalcomponentoflearning,tofindthebestsolutionalgorithm,thecorevalueoftheforcomputingsymmetricmatrixcharacteristics.Firstwriteserialalgorithm,thecalculationofthesymmetricmatrixeigenvalueandcalculatetherunningtime.Toincreaseitscomputationalefficiency,andonthisbasisItakeadvantageofmulti-coreprogrammingparallelismtooptimizetherunningspeedcomputingspeedup.Understandthepromotionandapplicationofparallelprogramdesignprinciplesandbasicapplicationslevelparallelprogrammingcanbewidelyusedinthefieldofstatistics,itwillgreatlyfacilitatetheprincipalcomponentanalysis.

Keywords:

PrincipalComponentAnalysisParallelProgramming

EigenvalueSpeedup

前言

 

通过对统计学中主成分分析法进行研究,了解主成分分析在生产生活中的重要应用性。

主成分分析法是将大量数据精简为少量有效数据的方法,它能覆盖原来的85%以上的有效数据,已经大量运用于统计学和经济学领域。

经过对主成分计算方法的学习,找到最佳的求解算法,其核心为计算对称矩阵的特征值。

首先编写出计算对称矩阵特征值的串行算法,并计算其运行时间。

为提高其计算效率,在此基础上利用多核程序设计将其并行化,以优化运行速度。

通过计算加速比,体会程序并行带来的改变。

通过本次研究,既了解了统计学中主成分分析的基本原理,又深化了对多核并行程序设计的理解。

争取掌握基本应用openmp技术进行并行程序设计的水平。

如果并行程序设计如果能广泛的应用在统计学领域,那么将极大地方便主成分分析法的推广和应用。

 

一.实验原理及过程分析

1.主成分分析理论在实验研究的应用情况

“多元统计分析”是近几十年来迅速发展起来的一门学科。

随着微机的普遍使用及统计软件的推广普及,回归分析、判别分析、聚类分析因子分析、对应分析等等,各种多元统计方法已广泛应用于自然科学各学科乃至社会科学各个领域。

主成分分析是一种常用的多元统计分析方法,相对于其他统计学方法,它更强调用数据本身来指导分析过程,而不是依赖于事先给定的某些假设。

主成分分析在地震预测中的应用。

根据主成分分析可以得到反应地震强度异常特征的综合指标形,发现该指标在2次地震前出现明显的异常变化,震后异常恢复,综合指标形可以较好地反映地震活动异常增强的特征。

主成分分析在生命科学研究中的应用。

生物样品特征谱的复杂多变性,对生物的每一个细小特征都进行处理分析已经是不现实的一种方法,因此很多的统计分析方法自然就被排除了,而主成分分析对于高维度的分子生物学数据则似乎是一种最恰当的分析方法。

主成分分析在经济评价中的应用。

在研究较复杂的经济问题时,利用多元统计分析中的主成分分析,可从多个经济指标中找出起支配作用的共同因素,从而抓住主要矛盾,以较少的变量进行定量分析,对企业的经济效益进行公正的评价。

此外,主成分分析方法已经被作为一种科学的分析方法广泛地运用于工农业生产、环境保护、商业盈利等等,并且主成分分析方法的应用领域会随着技术的进步越来越广阔。

2.实验原理和测试方法

实验原理:

设有一批样品,假定对每个样品取n个特征,即X=(x1,x2,……,xn)T,要求构造n个新特征y1,y2,……,yn,并使得它们满足以下1)、2)、3)3个条件:

1)每个新特征是原有各特征的线性组合,即

yi=ui1x1+ui2x2+…+uinxn,i=1,2,…,n,①

或yi=uTiX,ui=(ui1,ui2,…,uin)T,i=1,2,…,n,其中uij是常数,

2)各个新变量之间是互不相关的,即相关系数为零,即

r(yi,yj)=0,i,j=1,2,…n;i≠j②

3)u1使y1的方差达到极大值,u2使y2的方差达到次大,即

var(y1)≥var(y2)≥…≥var(yn)≥0③

需要注意的是上述方差达到极大须加上某种限制,否则线性组合的权值无穷大就没有意义了,实际问题常规定ui12+ui22+…+uin2=1以方便计算。

满足以上条件的新特征y1,y2,……,yn,分别称为样品点的第1、2、…、n个主成分,其中样品的数学模型如下:

X=(x1,x2,……,xn)T=

,m为样品的个数.

由以上的变换可以看出主成分是原变量的线性组合,是对原变量信息的一种改组,主成分不增加总信息量,也不减少总信息量。

怎样求出样本数据的的主成分y1,y2,……,yn,或者说怎样求出各个ui,首先求出全体样品点特征的协方差矩阵Sx或者是相关系数矩阵R,其表示如下:

或R(相关系数矩阵R算法见相关书籍)

通过对同一原始数据的协方差矩阵和相关系数矩阵主成分分析进行比较研究,发现二者的应用与研究目的有关,若不加区别,将会暴露各自的优点与不足。

因此,在实际应用中,选择哪种矩阵进行主成分分析,应视具体的研究目的而定,下面的问题讨论均以协方差矩阵为例。

这里S的下表x表示这是对应于旧特征x1,x2,…,xn的协方差矩阵,求出

的n个特征值

,…,

和与之对应的特征向量u1,u2,…,un,每个

是一个数,而与之对应的特征向量ui是一个列向量ui

(ui1,ui2,……,uin)T,它们之间的关系是

Sxui=

ui,i=1,2,…,n④

关于样品协方差的定义如下:

在N个样品中,第i个特征和第j个特征的之间的协方差为

,则

可以用如下公式求出,

Sij=

表示样品点中第i个特征的均值,由此协方差公式可以的出Sx是对称矩阵,即

,因而在计算时只要求出它的上三角形或下三角形部分即可,并且Sx主对角线元素

就是特征

的方差

在求

和ui就相当于解以上方程,具体解法可在各种计算方法中找到。

如果我们在解方程时还要求正交归一条件成立,即uTiuj=0且uTiui=1成立,则各个ui就是唯一确定的。

现在我们需要说明的是用以上方法求出的各个ui就可以满足前面所说的3个条件1)、2)、3)。

令yi=uTiX,i=1,2,…,n,则也就是要满足如下关系:

=

或Y=UX⑥

于是y1,y2,……,yn就是由x1,x2,……,xn经线性变换而得到的新特征。

可以证明,当经过上述形式的线性变换后,如果对应于X的协方差矩阵是Sx,那么对应于Y的协方差矩阵就是Sy=USxUT,注意到UT的每列恰好是Sx的一个特征向量并利用条件④就可以得到:

SxUT=

=UT∧⑦

其中∧是以

,…,

为主对角线元素的对角阵,再利用教归一条件又可得到:

Sy=USxUT=UUT∧=∧⑧

这就是说:

新特征y1,y2,……,yn两两之间的协方差为零,即它们是不相关的。

这样,我们已经找到了解决主成分分析问题的关键,即求原始协方差矩阵的特征值和特征向量,整个思路中需要注意的是三条件的作用:

条件1)是现行条件,反映新旧特征之间的关系是简单的,易于计算的,条件2)是不相关性,表明每个新特征有着独立的作用,条件3)是方差极大条件,主成分按序对原有样品的反映依次减弱。

主成分分析的计算步骤。

假定原始资料矩阵已知。

1)根据样品协方差公式⑤求出原有特征的协方差矩阵Sx或相关系数矩阵R;

2)用任意一种计算方法求出Sx或R的全部特征值

,…,

和对应的特征向量u1,u2,…,un,并对求出的特征值按从大到小的顺序排列,即

≥…≥

特征向量也应按照对应特征值的顺序排列。

这时已经可以求出n个新特征y1,y2,……,yn,它们满足条件Y=UX,其中U等于矩阵(u1,u2,…,un)的转置,而且Sy=∧是对角阵。

在Sx中,主对角线之和S11+S22+…+Snn等于原有各特征方差之和。

在Sy中,

,…,

分别等于新特征y1,y2,……,yn的方差,而且

+

+…+

之值仍然等于S11+S22+…+Snn.

3)由表达式①可以看出主成分的个数最多有n,否则主成分分析数据就毫无意义,由于总方差不增不减,y1,y2等前几个综合变量的方差较大,而yn-1,yn等后几个综合变量的方差较小。

严格说来,只有前几个综合变量才称得上主成分,后几个综合变量实为次成分。

为了便于问题的分析,实践中总是对最终得到的主成分进行取舍,如何进行取舍,我们定义第i个主成分yi的方差贡献率为

/(

+

+…+

而前m(m≤n)个主成分y1,y2,……,ym的累计方差贡献率计求解如下:

+

+…+

)/(

+

+…+

)⑩

保留多少个主成分取决于保留部分的累计方差贡献率,实践中,粗略规定一个百分比便可决定保留几个主成分;如果多留一个主成分,累积方差增加无几,便不再多留,如当前m个主成分的累计方差贡献率已经足够大,如超过85%时,就可以只选取前m个主成分的作为新的特征,我们认为前m个主成分基本包含了原来的样品信息,这时有关系:

=

测试方法:

分别利用串行和并行方法实现求特征值的算法,利用并行程序设计技术加快运行速度。

二.对实验结果的分析讨论及理论计算结果的比较

1.串行程序核心代码及结果展示

//classMatrix定义矩阵类

//------------------------------------------初始化矩阵元素

voidMatrix:

:

init()

{

x=y=0;

for(unsignedi=0;i

for(unsignedj=0;j

data[i][j]=0;

}

//-------------------------------------------重载+号

Matrix&operator+(constMatrix&left,constMatrix&right)

{

if(left.x!

=right.x||left.y!

=right.y)

{

cout<<"\n维数不相等,不能相加!

";

exit(0);

}

for(unsignedi=0;i

for(unsignedj=0;j

temp_Matrix.data[i][j]=right.data[i][j]+left.data[i][j];

temp_Matrix.x=right.x;

temp_Matrix.y=right.y;

returntemp_Matrix;

}

//----------------------------------用Householder矩阵化为实对称矩阵

voidHouseholder(Matrix&source)

{

unsignedi,lenth,k,m,n,flag;

doubletemp_lie_x[Max_xy],temp_lie_y[Max_xy],temp[Max_xy];

doubles;

for(i=0;i

{

for(k=0;k

{//初始化为0

temp_lie_x[k]=0;

temp_lie_y[k]=0;

temp[k]=0;

}

……

}

//------------------------------------检查是否为实对称矩阵

voidMatrix:

:

check_shiduichen()

{

……

}

voidMatrix:

:

shucheng(doublechangshu)//数乘运算

{

unsignedi,j;

for(i=0;i

for(j=0;j

data[i][j]*=changshu;

}

int_tmain(intargc,_TCHAR*argv[])

{

doublebegin,end,time;

begin=(double)clock()/(double)CLK_TCK;//时间函数

Matrixa;

a.creat();

cout<<"输入的矩阵为a:

";

cout<

a.check_shiduichen();

Householder(a);

cout<<"用Householder化为实对称矩阵为a:

";

cout<

a.sturm();

cout<

end=(double)clock()/(double)CLK_TCK;

time=end-begin;//计算并行程序的执行时间

cout<<"时间是";

cout<

return0;

}

串行运行结果:

图1-13*3矩阵串行结果

图1-210*10矩阵串行运行过程

图1-310*10矩阵串行结果

图1-415*15矩阵串行运行过程

图1-515*15矩阵串行运行结果

2.并行程序核心代码及结果展示

#include"stdafx.h"

#include

#include

#include

#include

#include导入opm.h库函数

usingnamespacestd;

//-------------------------------------------重载+号加入并行语句

Matrix&operator+(constMatrix&left,constMatrix&right)

{intj;

if(left.x!

=right.x||left.y!

=right.y)

{

cout<<"\n维数不相等,不能相加!

";

exit(0);

}

for(unsignedi=0;i

#pragmaompparallelforprivate(j)//多线程并行

for(j=0;j

temp_Matrix.data[i][j]=right.data[i][j]+left.data[i][j];

temp_Matrix.x=right.x;

temp_Matrix.y=right.y;

returntemp_Matrix;

}

//----------------------------------用Householder矩阵化为实对称矩阵加入并行语句

voidHouseholder(Matrix&source)

{

for(i=0;i

{

#pragmaompparallelforprivate(k)

for(k=0;k

{//初始化为a

temp_lie_x[k]=0;

temp_lie_y[k]=0;

temp[k]=0;

}

voidMatrix:

:

shucheng(doublechangshu)//数乘运算加入并行语句

{

inti,j;

omp_set_num_threads(3);

#pragmaompparallelfor

for(i=0;i

for(j=0;j

data[i][j]*=changshu;

}

int_tmain(intargc,_TCHAR*argv[])

{

doublebegin,end,time;

begin=(double)clock()/(double)CLK_TCK;//时间函数

Matrixa;

a.creat();

cout<<"输入的矩阵为a:

";

cout<

a.check_shiduichen();

Householder(a);

cout<<"用Householder化为实对称矩阵为a:

";

cout<

a.sturm();

cout<

end=(double)clock()/(double)CLK_TCK;

time=end-begin;//计算并行程序的执行时间

cout<<"时间是";

cout<

return0;

}

并行程序运行结果:

图2-13*3矩阵并行结果

图2-210*10矩阵并行运行过程

图2-310*10矩阵并行结果

图2-415*15矩阵并行过程

图2-515*15矩阵并行结果

三.结果对比分析

并行化结果展示:

3*3维矩阵串行程序时间:

t1=20.81并行程序时间:

t2=7.612加速比=20.81/7.612=2.733并行化结果展示:

10*10维矩阵串行程序时间:

t1=144.581并行程序时间:

t2=109.699加速比=144.581/109.699=1.317并行化结果展示:

15*15维矩阵串行程序时间:

t1=365.461并行程序时间:

t2=290.316加速比=365.461/290.316=1.255

表1串并行结果对比表

规模

串行时间

并行时间

加速比

3*3

20.81

7.612

2.733

10*10

144.581

109.699

1.317

15*15

365.461

290.316

1.255

四.结 论

通过对主成分分析法进行研究,找到了计算对称矩阵特征值的串行算法,并在此基础上利用多核程序设计将其并行化,以优化运行速度。

通过了解并行程序设计原理并达到基本能应用的水平提高了程序的运行速度。

说明多核程序设计技术在大量数据的计算当中能发挥很大作用,较普通串行算法有优越性,应该推广在生产生活中。

通过本次研究,我明白了主成分分析法的基本原理极其计算方法,并且以此为引例,知道了如何使用并行方法进行程序设计。

深切体会了并行对提高程序运行速度的意义。

掌握了如何利用openMP的环境进行并行程序设计。

后来通过查询资料知道了如何运用一些函数如何使用,环境如何配置,很快克服了,得到了正确的结果。

在使用测试数据时,由于数据量大才能显示出并行技术的优越性,所以开始的时候数据量小,后来加大了数据量,效果好很多。

需要输入对称阵,因此一处输出错误就出现错误结果,以后将好好注意,争取输入界面更加人性化。

在我的研究过程中遇到了一些困难,经过老师的指点和同学们的帮助得以克服,在这里很感谢大家的帮助!

在以后的路上我将继续努力,提高自己的知识水平,争取更多研究成果。

 

五.参考文献 

[1]王文义,王春霞.PC集群及其并行程序性能的实用检测方法[J].计算机工程与应用,2004,(40)14:

117-119[1]李宝峰.多核程序设计技术[M].北京:

电子工业出版社,2007。

[2]陈国良.并行计算[M].北京:

高等教育出版社,2003。

[3]向令,王鹏.并行迭代算法的研究与应用.成都信息工程学院学报,2007,22卷.。

[4]王鹏.并行计算应用与实战[M].北京:

机械工业出版社,2009。

[5]StanleyB.LippmanBarbaraE.MooJoséeLaJoie.C++Primer,FourthEdition[M].AddisonWesley/Pearson,2006。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1