基于Spark的因子分析法对古代疫病数据的分析与研究

2018-07-09 09:00郑晓梅黎钲晖
无线互联科技 2018年13期
关键词:单机分块运算

刘 迪,郑晓梅,黎钲晖

(南京中医药大学 信息技术学院,江苏 南京 210023)

古代疫病数据繁杂多怪,但是其中蕴含了丰富的中医疫病的知识,分析数据中的潜在规律,可以为中医临床提供客观有效的指导。目前对古代疫病数据的研究大多应用数理统计方法对某个区域、某个时期来分析疫病的病因病机、治则治法、方药配伍、临床疗效等。但实际上疫病的相关因素有很多,如天气、季节、地域、朝代、用药、人群等。在某种疫病的生命周期只有某几种因素导致了疫病的健壮或衰亡。而其他因素则是一些基础的,影响度较小的,抛开这些影响因素不会对疫病的发展趋势产生很大的变化。如果能够量化某种因素对某种疫病的影响程度,就能找出众多疫病之间的决定性因素的相似点,从而发掘古代疫病数据中的潜在规律。

就当前而言针对古代疫病的影响因素的分析,完全基于某种算法,但是无论哪一种算法都经受不住高迭代度的复杂运算,如文献[1]中基于Apriori算法对古代疫病数据进行数据挖掘,原因就在于目前计算机的硬件限制,大部分研究都是在用运算时间去填补机器硬件的缺陷,然而,在数据量达到TB,PB级别时,时间的弥补也无济于事。但是当今社会,信息化时代,我们每个人每天都在产生大量的数据,传统的计算方法有很大缺陷,如何高效、迅速地发掘数据中的潜在价值,本文提出了基于Spark的因子分析法,即将大数据分布式存储计算架构与传统的分析算法相结合,能够解决数据量过大导致运算时间过长甚至无法进行运算的问题[2]。

随着云计算、移动互联网等新一代信息技术的创新和应用普及,数据的计算方式开启了一次重大的转型,由于古代疫病数据需要繁杂的分析工作,采用适合的计算分析方法必不可少,本文将古代疫病数据算作计算数据,利用Spark与传统的因子分析算法相结合,帮助找出疫病数据中的潜在规律,了解古代疫病的特点,对现代中医疫病的治疗提供有效的临床指导。

1 准备工作

1.1 因子分析

本研究的目的在于寻找各种和疫病相关因素之间的潜在规律,为现代的临床医疗提供参考指导。在我们从古书中抽取的古代疫病数据中,针对一种疫病有多重不同的影响因素,例如年代、病名、地域、季节、环境、病因等,维度复杂混乱没有规律可循。

因子分析多元统计分析处理的是多变量问题。由于变量较多,增加了分析问题的复杂性。但在实际问题中,变量之间可能存在一定的相关性,因此,多变量中可能存在信息的重叠。人们自然希望通过克服相关性、重叠性,用较少的变量来代替原来较多的变量,而这种代替可以反映原来多个变量的大部分信息,这实际上是一种“降维”的思想[3]。

1.2 Spark架构

Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。Spark运行在现有的Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)基础之上提供额外的增强功能。它支持将Spark应用部署到现存的Hadoop v1集群或Hadoop v2 YARN集群甚至是Mesos之中。Spark通过在数据处理过程中成本更低的洗牌(Shuffle)方式,将MapReduce提升到一个更高的层次。利用内存数据存储和接近实时的处理能力,Spark比其他的大数据处理技术的性能要快很多倍。Spark还支持大数据查询的延迟计算,这可以帮助优化大数据处理流程中的处理步骤。Spark还提供高级的API以提升开发者的生产力,除此之外还为大数据解决方案提供一致的体系架构模型[4]。Spark的结构如图1所示。

1.3 Spark与因子分析的结合

因子分析法是指从研究指标相关矩阵内部的依赖关系出发,把一些信息重叠、具有错综复杂关系的变量归结为少数几个相关的综合因子的一种多元统计分析方法。基本思想是:根据相关性大小把变量分组,使得同组内的变量之间相关性较高,但不同组的变量不相关或相关性较低,每组变量代表一个基本结构—公共因子。

图1 Spark结构

但是在矩阵求解的过程中,大部分运算都是建立在过长的时耗上,不能进行的运算,但是如果降低求解时的迭代次数,结果会发生偏移。所以引入Spark分布式计算架构,根据MapReduce的思想,将矩阵进行分解计算,从而提高运算的效率[5]。

2 基于Spark的因子分析法

古代疫病数据中含有大量的疫病相关因素,针对其影响因素较多的特点,本文采用因子分析法进行属性的划分,通过计算给出每种因素的权重,或是形成新的属性定义,找到疫病相关的新的因素,能够对疫病的兴衰提供诠释。

2.1 数据采集,数据预处理

收集《兰室秘藏》《简明医彀》《古今医鉴》《丹溪心法》等古代医书籍中提取和疫病有关的部分,将其分组归类,对描述的方式进行归一化、标准化,最终的数据库中包含的年代、病名、地域、季节、环境、病因、病例数、年龄、体质、性别、症状、证型、病机、治法、方剂、剂型、组成及剂量、用法、其他疗法、疗效。所有的字段都以古代疫病为基础,从医书中找出相关影响因素(见表1)[6]。

2.2 Spark结合因子分析

Spark中的MapReduce将计算分解为map和Reduce两个操作,我们引用mapreduce的计算思想将相关系数矩阵使用QR进行分解,将每一块提交到一个worknode中,各个worknode相互独立并同时进行运算,再经过Reduce将矩阵的求解结果取出进行胶合。即将大矩阵划分为小矩阵,在不减少迭代次数的情况下短时间对其进行求解,提高运算的准确率和效率。

QR分解法是目前求一般矩阵全部特征值的最有效且最广泛应用的方法,一般矩阵先经过正交相似变化成上Hessenberg矩阵,然后再应用QR方法求特征值特征向量,由于因子分析处理的是相关系数矩阵,是对称矩阵,从而可以进行分块存储、运算,在不减少迭代次数的基础上有效地减少运行的时间,提高效率[7]。Spark和因子分析组合流程如图2所示。

图2 Spark和因子分析组合流程

表1 古代疫病相关数据

2.3 因子载荷矩阵旋转

我们得到的初始因子解各主因子的典型代表变量不是很突出,容易使得因子的意义含糊不清,不便于对实际问题进行分析,出于该种考虑,可以对初始公共因子进行线性组合,即进行因子旋转,以期找到意义更为明确、实际意义更明显的因子[8-9]。

3 实验结果

实验设置了两组比对:第一组,在运算模式都为单机串行的情况下,两个矩阵和4个矩阵样本个数相同、属性个数不同的情况下运算的时耗。第二组,在分块的个数都为4的情况下,计算不同属性个数,单机串行将关系型矩阵分别分为两个和4个矩阵的试验结果对比如表2所示。

表2 分块不同的运行时间

单机代码实现因子分析和基于Spark的因子分析的运行时间对比结果如表3所示(分块量为4)。

从表3可以看出,相对于单机计算,基于Spark的因子分析并行算法在速度上明显更快,并行化的速度在属性量少的情况下差异不大,但是在属性的个数大幅度提升之后,并行化的运行速度要远高于单机的运行速度,在迭代次数不减少的情况下运行的性能十分可观,由此可见算法十分高效。

表3 单机和Spark运行时间对比

4 结语

本研究利用QR分解法对因子分析法中的相关系数矩阵进行分解,并使用Spark对分解的矩阵进行分布式运算,再将计算的结果进行胶合,从而提高大样本数据、高迭代次数下因子分析法的运行效率。从实验结果可以看出,本文提出的基于Spark的因子分析算法对多因素的古代疫病数据具有良好的运行性能,从分块个数来看,随着分块的数量的增加,分块的优势越来越明显,相对于单机运行超多属性的因子分析算法而言,基于Spark的并行计算模型的运行效率更高。

[1]蔡婉婷,李新霞,陈仁寿.基于Apriori算法的古现代疫病用药比较与分析[J].时珍国医国药,2017(6):1510-1512.

[2]辛智科.中国古代疫病的流行及其防治[C].哈尔滨:国际中国科学史会议,2004.

[3]甄尽忠.近30年来中国古代疫病流行及社会应对机制研究综述[J].商丘师范学院学报,2010(8):59-64.

[4]张稚鲲.疫病(急性传染性疾病)古今用药特点及配伍规律研究[D].南京:南京中医药大学,2017.

[5]熊益亮.明清闽北疫情资料整理与研究[D].福州:福建中医药大学,2014.

[6]单联喆.明清山西疫病流行规律研究[D].北京:中国中医科学院,2013.

[7]宿佩勇.福州古代疫病文献资料研究[D].福州:福建中医学院,2005.

[8]王瑶.基于Spark的主成分分析和因子分析并行化的研究与实现[D].北京:北京邮电大学,2017.

[9]徐斌,吕梁.基于“i-Spark”模型的新员工创新素质测评实证研究[J].中国人力资源开发,2016(6):55-62.

猜你喜欢
单机分块运算
重视运算与推理,解决数列求和题
热连轧单机架粗轧机中间坯侧弯废钢成因及对策
有趣的运算
分块矩阵在线性代数中的应用
宇航通用单机订单式管理模式构建与实践
反三角分块矩阵Drazin逆新的表示
基于自适应中值滤波的分块压缩感知人脸识别
基于多分辨率半边的分块LOD模型无缝表达