《高维空间随机统计软件HDS说明书.docx》由会员分享,可在线阅读,更多相关《高维空间随机统计软件HDS说明书.docx(9页珍藏版)》请在第一文库网上搜索。
1、高维空间随机统计软件HDS说明书北京精计软件科技有限公司第一章背景简介随着现代数据的收集和储存技术的提高,统计数据呈现出高维性。由于可重复研究的限制,参加研究的个体数量相对很小。这就是现代统计学中最具挑战的大P,小n问题。具体地说,数据的维数大大超过样本的个数。这尤其表现在生物基因学研究,网络信息,以及金融数据中。如何在样本量不是很大的前提下分析超高维数据,是一个非常具有挑战的、也是国际统计学的前沿课题。目前研究的重点从五个方面对高维数据统计建模与分析进行科学的,系统的研究。这五个方面是:(1)高维数据的变量选择、(2)超高维多元统计分析、(3)复杂数据的相关性、(4)大规模在线数据的监控和(
2、5)高维生存数据分析。这五方面的研究均对传统的统计推断理论提出了全新的挑战,且均是目前国际统计学研究的最前沿问题。这五个课题相对独立又相互依托,有理论也有应用,将从不同的方向对高维数据的统计推断提出有效的解决方法,建立一个统一的适应于高维数据统计建模与分析的框架。本软件是一个高维空间随机统计软件,属于上述的第二个方向。目前已有的主要算法是马尔科夫链-蒙特卡洛(MCMC)方法,它可以搜索高维空间中的平衡分布,及其极值点。后面还将增加更多的快速、高效算法。对于MCMC算法,采样方法有多种,包括Metro-HaSting,GibbS等。版本1O为串行软件。初始参数点随机产生,一般经过一段时间的迭代后
3、找到分布的近似极大值。MeMC是由两个MC构成的,分别指马尔科夫链和蒙特卡罗方法。马尔可夫链蒙特卡洛方法(MarkOVChainMonteCar1o),简称MCMCo其产生于20世纪50年代早期,是在贝叶斯理论框架下,通过计算机进行模拟的蒙特卡洛方法(MOnteCar1o)o该方法将马尔可夫(MarkoV)过程引入到MonteCarIO模拟中,实现抽样分布随模拟的进行而改变的动态模拟,弥补了传统的蒙特卡罗积分只能静态模拟的缺陷。Metropo1is等人在1953年首次提出了基于马尔可夫链的蒙特卡罗方法,即Metropo1is算法,并在最早的计算机上编程实现。Metropo1is算法是首个普适的
4、采样方法,并启发了一系列MCMC方法,所以人们把它视为随机模拟技术腾飞的起点。MetroPOIiS算法这篇论文1被收录在统计学中的重大突破中,ComputinginScience&Engineering尝试列出了对20世纪科学与工程的发展和实践影响最大的十种算法。Metropo1isA1gorithmforMonteCar1o被列为十大算法之首。用于蒙特卡洛的Metropo1is算法定义了一个收敛的马尔可夫链,其极限就是所需的概率分布。Metropo1is算法及其推广算法已被称为蒙特卡洛马尔可夫链技术(MCMC),因为这些算法模拟了一个马尔可夫链,从极限分布中获取抽样。1 .蒙特卡罗方法:是一
5、种基于采样的随机近似方法,主要应用于随机采样、数学期望估计、定积分计算中。就是假设概率分布是已知的,然后通过采样获得概率分布的随机样本,得到了符合该概率分布的这些样本后,可以用于估计总体分布、计算均值来估计总体期望、通过期望计算积分等。所以蒙特卡罗方法核心就是随机采样。一般的蒙特卡罗方法有概率密度采样、接受拒绝采样。重要性采样等。2 .马尔科夫链:满足P(Xt1X1-1,Xt-2,.,)=P(XtIXE),t=1,2.的随机序列乂=之”1,.”,.称为马尔科夫链,就是说XiE时的状态,只与Xt有关,而与之前的状态没有关系。马氏链在Xt“时的状态分布(t1)可以X时的状态分布(t)和转移概率矩阵
6、P来决定,即(t+1)=P(t)o马氏链的一个重要性质就是平稳分布:若某时刻的一个状态分布使得JTP=JI(细致平稳方程()p(,*)=(x*)p(x*,x)是平稳分布的充分不必要条件),则称兀为马尔可夫链的平稳分布。第二章算法原理1 .下面是最早的MH算法定义:1)初始化马氏链:Xo=Xo;2)对t=0,1,2,.进行下面的循环 第t个时刻马氏链状态为Xt=Xt,采样y=q(xxt); 从均匀分布采样u=uniform(0.0,1.0); 如果u(t,y)=p(y)q(xty),则接受转移Xt-y,即X+1=y; 否则不接受,即Xt+1=冗; 不断修正P(X)2 .下面是改进后的MH算法定义
7、:1)初始化马氏链:X。=Xo;2)对t=0,1,2,进行下面的循环 第t个时刻马氏链状态为Xt=xt,采样y=q(t); 从均匀分布采样U=uniform(0.0,1.0); 如果Ua(xt,y)=minp(y)q(1y),1,则接受转移Xtfy,Pg)q(y%D即Xm=y; 否则不接受,即Xt+1=X1; 不断修正P(X);3 .GibbS采样算法:1)初始化马氏链:Xo=%o;2)对t=0,1,2,进行下面的循环 xf+DP(X11眩痣,篇); *+1)p(%2注+1,后,,篇); 婿+1)Pa.悟+1,.,xjtt%j+1,.,Xn); X,1)P(Xn+1,厩+1,.,4D4.相似度
8、函数形式:在调试MCMC算法时,采用的任意采样点信号同实际信号的相似度函数定义如下:122/1S1mmax(.jPOW(X1X?,2.0),1.0e-32)在GibbS算法中,由于只在一个方向进行采样,任意采样点信号同实际信号的相似度函数定义如下:sim=-器-(2)max(pow(Xj-X,2.0),1.0e-32)第三章软件结构1 .整体架构:下图是HDS软件的流程图。其中采样模块包含了样本点的采集和比对,以及根据算法的取舍。图1HDS的程序结构示意图2 .数据结构:下图是HDS采用的数据结构示意图。HDS软件(1) 图2.HDS的数据结构示意图(2) Samp1e数据类这是存储一个高维空
9、间的样本点的类,包含了编号和空间坐标信息OC1assSamp1epub1ic:Samp1e(intdimension)coord=newintdimension;)Samp1edntdimension,doub1e*cds,doub1e*bmin,doub1e*dis);Samp1eOde1etecoord;Intid,ent;int*coord;;(3) SamP1eSPaCe数据类这是存储所有高维空间的样本点的类,是高维随机统计的空间。其中有多个VeCtor和InaP类型的变量,用于进行样本点的采样、存储和排序等操作。它是进行高维随机统计的基础类。C1assSamp1eSpacepub1i
10、c:Samp1eSpace(intns,intdimension,doub1e*bmin,doub1e*bmax,doub1e*range,doub1e*dis,int*mesh,doub1e*target,doub1e*start,intstype,intOutsamp1eO)dim=dimension;nsamp1e=ns;coord=newD2D(nsamp1e,dim);bmin=bmin;bmax=bmax;maxIoc=newdoub1edim;mset=newstd:rmapvector,doub1e;pmset=newM1D(dim);pmit=newstd:mapvector
11、,doub1e:iteratordim;e(nsamp1e);;Samp1eSpace()de1eteD2D(coord);de1etemax1oc;free(mset);de1eteMID(dim,pmset);de1etepmit;;intnsamp1e,tsamp1e,dim;intoutsamp1e;doub1e*bmin,*bmax;doub1e*max1oc,maxden;std:mapvector,doub1e*mset;std:mapvector,doub1e:iteratormit,mit;std:rmapvector,doub1e*pmset;std:mapvector,d
12、oub1e:iterator*pmit;std:vectorvset;std:vector:iteratorvit,wit;voidc1earsamp1e();voidcomputedensity();boo1searchsamp1e(doub1e*cds);voidinsertsamp1e(doub1e*cds);;(4) PSPaCe数据类这是并行环境下所有处理器上进行高维随机统计的类,Samp1eSPaCe是它的成员函数。其中进行样本点的随机搜集、随机采样、搜索和排序等算法。后面新的算法将增加更多的函数。c1assPSpacepub1ic:PSpace()rmax=1.0;rmin=0.
13、0;sigma=0.2;gs1rngenvsetup();T=gs1rngdefau1t;r=gs1rnga11oc(T);sp=newSigna1(r,10.0,1000.0);;PSpace()de1etexmax;de1ete口parameters;de1etebmin;de1ete口bmax;de1eterange;de1etedis;de1etemesh;de1etetarget;de1etestart;gs1rngfree(r);de1etetemp;de1etefunc;free(gwp);;doub1esigma,rmax,rmin;constgs1rngtype*T;gs1rng*r;intniter,nm;Samp1eSpace*data;GWtemp1ate*gwp;Signa1*sp;voidreadin();voidinit();voidonesamp1e(doub1e*func);voidonesamp1egibbs(intdir,doub1e*func);doub1esim(doub1e*txyz);doub1esim(intdir,doub1e*txyz);doub1eonedirgibbs(intdir,doub1etsim,doub1e*tden);doub1erandstep(intdir);