计算机应用   2016, Vol. 36 Issue (11): 3044-3049  DOI: 10.11772/j.issn.1001-9081.2016.11.3044
0

引用本文 

邳文君, 宫秀军. 基于Hadoop架构的数据驱动的SVM并行增量学习算法[J]. 计算机应用, 2016, 36(11): 3044-3049.DOI: 10.11772/j.issn.1001-9081.2016.11.3044.
PI Wenjun, GONG Xiujun. Data driven parallel incremental support vector machine learning algorithm based on Hadoop framework[J]. Journal of Computer Applications, 2016, 36(11): 3044-3049. DOI: 10.11772/j.issn.1001-9081.2016.11.3044.

基金项目

国家自然科学基金资助项目(61170177);国家863计划重点项目(2015AA020101);国家973计划项目(2013CB32930X)

通信作者

邳文君(1992-), 女, 天津人, 硕士研究生, 主要研究方向:分布式数据挖掘、高性能计算pideshengab@sina.com

作者简介

宫秀军(1972-), 男, 内蒙古赤峰人, 副教授, 博士, 主要研究方向:人工智能、数据挖掘、生物信息学

文章历史

收稿日期:2016-05-03
修回日期:2016-06-25
基于Hadoop架构的数据驱动的SVM并行增量学习算法
邳文君1,2, 宫秀军1,2    
1. 天津大学 计算机科学与技术学院, 天津 300350 ;
2. 天津市认知计算与应用重点实验室(天津大学), 天津 300350
摘要: 针对传统支持向量机(SVM)算法难以处理大规模训练数据的困境,提出一种基于Hadoop的数据驱动的并行增量Adaboost-SVM算法(PIASVM)。利用集成学习策略,局部分类器处理一个分区的数据,融合其分类结果得到组合分类器;增量学习中用权值刻画样本的空间分布特性,对样本进行迭代加权,利用遗忘因子实现新增样本的选择及历史样本的淘汰;采用基于HBase的控制器组件用以调度迭代过程,持久化中间结果并减小MapReduce原有框架迭代过程中的带宽压力。多组实验结果表明,所提算法具有优良的加速比、扩展率和数据伸缩度,在保证分类精度的基础上提高了SVM算法对大规模数据的处理能力。
关键词: Hadoop    HBase    支持向量机    增量学习    集成学习    遗忘因子    控制器组件    
Data driven parallel incremental support vector machine learning algorithm based on Hadoop framework
PI Wenjun1,2, GONG Xiujun1,2     
1. School of Computer Science and Technology, Tianjin University, Tianjin 300350, China ;
2. Tianjin Key Laboratory of Cognitive Computing and Application(Tianjin University), Tianjin 300350, China
Background: This work is partially supported by National Natural Science Foundation of China (61170177), the Key Projects of National High Technology Research and Development Program (863 Program) of China (2015AA020101), the National Basic Research Program (973 Program) of China (2013CB32930X).
PI Wenjun, born in 1992, M. S. candidate. Her research interests include distributed data mining, high performance computing.
GONG Xiujun, born in 1972, Ph. D., associate professor. His research interests include artificial intelligence, data mining, bioinformatics.
Abstract: Traditional Support Vector Machine (SVM) algorithm is difficult to deal with the problem of large scale training data, an efficient data driven Parallel Incremental Adaboost-SVM (PIASVM) learning algorithm based on Hadoop was proposed. An ensemble system was used to make each classifier process a partition of the data, and then integrated the classification results to get the combination classifier. Weights were used to depict the spatial distribution prosperities of samples which were to be iteratively reweighted during the incremental training stage, and forgetting factor was applied to select new samples and eliminate historical samples. Also, the controller component based on HBase was used to schedule the iterative procedure, persist the intermediate results and reduce the bandwidth pressure of iterative MapReduce. The experimental results on multiple data sets demonstrate that the proposed algorithm has good performance in speedup, sizeup and scaleup, and high processing capacity of large-scale data while guaranteeing high accuracy.
Key words: Hadoop    HBase    Support Vector Machine (SVM)    incremental learning    ensemble leaning    forgetting factor    controller component    
0 引言

我们正处于大数据时代,数据的增长速率已经远远超出了单机计算能力的提升速率。如何提高分类算法处理海量数据的能力是一个亟待解决的问题。在分类算法领域,支持向量机(Support Vector Machine, SVM)算法以其较好的健壮性和稳定性一直是主流的分类算法,SVM基于统计学习理论中的结构风险最小化原则,有效解决了经典统计方法在处理高维度数据中所出现的维度灾难问题。但SVM作为一个计算密集型算法,串行方法难以适应海量数据,面对大规模训练数据时,设法在保证分离精度的基础上提高SVM训练效率和增量学习能力已经成为近几年SVM的一大研究热点。

提高SVM算法运行效率的方法之一是进行并行计算,SVM并行化主要有两种思路:一是基于算法本身进行并行化处理;二是采用多分类器实现并行化。文献[1]提出基于消息传递接口(Message Passing Interface, MPI)的并行分布式SVM算法(CoDLib),但该算法在追求并行效率的同时忽略对分类精度的验证。文献[2]提出一种层叠式SVM算法,通过级联来保证算法收敛,但因其迭代过程中数据成倍增长,收敛速度并不理想。文献[3]通过不完全Cholesky分解的方法实现了并行支持向量机(Parallel SVM, PSVM),降低了传统SVM算法的空间复杂度和时间复杂度,在学习精度与SVM算法相差不大的前提下,大幅提高了分类速度。文献[4]提出一种基于MapReduce的并行SVM算法,但算法为了保证精度需要借助外界信息,无法自动运行。文献[5]提出了基于可配置网络环境下分布式并行SVM训练机制。在强连接的网络中交换SV(Support Vector)使得多个服务器可以以有限的通信代价和较快的训练速度并发处理分布式数据集。

在SVM高性能算法研究中,SVM增量学习的研究也受到了很多人的关注。不同于多数并行计算中利用硬件资源和重组算法步骤以提高训练效率,增量学习主要关注以下3个方面:增量学习的新样本、淘汰无用样本,以当前状态作为新一次学习的起点(热开始)。其中增量学习新样本较容易实现且大多数增量学习几乎均具有该能力,文献[6]提出一种仅支持增量加入样例的增量学习算法,容易造成样本过度累计,超出算法的处理能力。支持旧样本淘汰的增量学习算法,存在淘汰样例的机制难以确定的难点,该方法虽然可以通过有效减小训练样本规模的方式提高算法处理能力,但淘汰机制设置不当会对分类精度造成一定损失,文献[7]提出一种基于超球选择候选支持向量的SVM增量学习算法,既实现了样本以增量方式加入系统,也实现了旧样本中无用部分的淘汰。支持热开始的增量学习算法以当前状态作为学习机更新的起点,使学习机的权值从一开始就接近于最优解,节约解的寻找时间,文献[8]提出一种支持热开始的增量学习算法,即算法可以将过去的解作为出发点找到新的解,不足之处是该方法需要存储历史样本。

目前,学者们也考虑到将增量学习与并行计算这两种提高算法运行效率的方法相结合:文献[9]提出了一种基于图形处理器(Graphics Processing Unit, GPU)的最小二乘支持向量机(Least Square-SVM, LS-SVM)并行增量算法,计算速度比CPU算法快130倍,但存在分类精度较低、缺乏理论收敛域的不足; 文献[10]在Hadoop平台上采用矩阵分解的方式实现了极限支持向量机(Extreme Support Vector Machine, ESVM)的并行增量算法模型(Parallel Incremental Extreme SVM, PIESVM),在加速比、数据伸缩度和扩展度上均有较好的表现。

通过以上的研究可以看出,传统的并行处理方法,如MPI、网格计算存在开发复杂、扩展性不佳等问题,利用云计算方法提高SVM算法运行效率逐渐成为研究的焦点。Hadoop作为云计算中的主流平台,具有部署简单、运行高效的特点[11]。但是,标准的MapReduce计算模型对分类算法的并行化主要通过对数据集的一次Map操作和Reduce操作得到最终分类模型,但当训练样本量巨大时,数据必须大量分片,即使计算资源充足,过多的调度与通信操作也会大幅降低算法性能。此外,利用增量学习策略,除了可以适应动态数据,还可以通过选择适合的增量学习策略降低算法对硬件的要求。但面对增量学习这种需要迭代计算的数据挖掘场景,传统的MapReduce计算模型采取的是为每次迭代创建新的MapReduce任务的方法,这样的方法带来以下3个问题: 1)每轮迭代会重复载入静态训练数据,消耗了大量网络带宽; 2)迭代开始阶段,均需要初始化运行环境,建立新的MapReduce任务; 3)大量的迭代计算会造成在Shuffle阶段产生大量的中间键值对,造成网络阻塞[12]

本文提出一种基于Hadoop架构的数据驱动的Adaboost-SVM增量学习算法(Parallel Incremental Adaboost-SVM, PIASVM)。本文的主要工作包括:利用Hadoop平台实现Adaboost-SVM分布式学习,利用特定规则将多个学习结果进行组合从而获得比单个学习器更好的学习效果;利用基于遗忘因子的增量学习思路,减小实际训练样本规模;设计基于HBase的Controller组件用以调度和优化迭代过程,持久化中间结果的同时减小原有框架迭代过程中的带宽压力。在优化的迭代计算机制的基础上,通过将增量学习与并行计算这两种提高算法运行效率的方法相结合,算法在具有对大规模数据高效处理能力的同时,将集成学习与SVM算法相结合,使得算法同时可以保持较高的分类精度。

1 PIASVM算法模型设计

算法模型主要分为两个部分:一个是基于Hadoop实现的并行增量学习模块,该模块分为数据划分阶段、并行学习阶段和增量学习阶段3个阶段;另一个是基于HBase的Controller组件,因Hadoop处理迭代计算问题的不足,设计该组件用来控制和优化迭代计算过程。算法的具体处理处理流程在1.2节中详细分析。

PIASVM算法将大规模数据分为初始训练数据和增量数据,以增量数据作为驱动,初始训练数据所得模型参数作为起点,使用权重刻画样本的空间分布特征,按照基于遗忘因子的迭代反馈机制调整新一轮的训练样本规模,实现对内样本点的淘汰、边界样本的持续关注和对准边界样本的有选择加入。在并行学习阶段,将基于集成学习的SVM算法在Hadoop框架上并行化实现,最终生成的组合分类器具有较高的预测精度,这个分类器的参数作为下一次训练的起点。每一轮根据样本的权值和遗忘因子确定新一轮的训练样本规模,完成对新增样本的加入和对历史样本的淘汰。在训练过程中,为样本进行迭代加权,因为增量样本的加入势必会影响样本的空间分布。在增量学习阶段,对于每一轮出现的增量数据块,根据上一轮的分类器训练参数,为增量数据调整权重,将增量数据及其权重列表附加到原始训练数据中。下面简要介绍算法涉及到的3个关键部件:集成学习和SVM结合、基于遗忘因子的迭代反馈机制和基于HBase的Controller迭代控制组件。

1.1 关键部件设计分析 1.1.1 集成学习

集成学习利用特定规则将多个学习结果进行组合从而获得比单个学习器更好的学习效果。集成学习思想普遍应用于分类问题。在以下3个场景时集成学习机制较为适用:其一, 当数据量过大难以被单个分类器所处理时,集成可以让每个分类器处理一个分区的数据,最后将其分类结果进行融合。其二,机器学习算法通常需要足够的、有代表性的数据来生成一个有效的模型。如果数据规模很小,集成学习可以通过对原始训练数据进行重叠随机采样来扩充训练数据。其三,当决策平面较为复杂时,很难用单个分类器完整描述时,分类边界被近似成弱分类器的组合会是一个很好的选择。Adaboost是常见的集成算法,如图 2所示,通过在迭代训练过程中不断调整样本的权重,计算误差率Err并根据误差率更新局部分类器话语权α。如图 1所示,本文采用Adaboost-SVM算法作为并行的基础分类算法在Hadoop平台上并行实现,算法的输入为Split数据分片,在T轮迭代后得到T个带有话语权的局部弱分类器C1, C2, …, CT

图 1 PIASVM算法框架整体设计
图 2 Adaboost-SVM算法
1.1.2 基于遗忘因子的迭代反馈机制

文献[13]中提到利用权值Wi来刻画训练数据集中每个样本点的空间分布特性,重点关注3类样本:内样本点、边界样本点和准边界样本点。内样本点在训练过程中大量存在,对分类面的影响很小,可以逐步淘汰以减小训练样本规模。边界样本是指那些始终在各轮SV集出现的样本,它们对分类函数形成起到至关重要的作用,应在训练中全部保留并予以关注。在SV集中抖动出现的样本被定义为类的准边界样本,这部分样本可以按一定规则选取较优的部分加入到下轮新训练集中。设Wi为样本点xi的权值,定义如下:

$ \left\{ {\begin{array}{*{20}{l}} {0 \le {W_i} < {C_{{\rm{inside}}}} \Rightarrow {x_i}{\rm{为内样本}}}\\ {{C_{{\rm{inside}}}} \le {W_i} < {C_{quasi}} \Rightarrow {x_i}处于权值调定中}\\ {{C_{quasi}} \le {W_i} < {C_{{\rm{boundary}}}} \Rightarrow {x_i}为准边界样本}\\ {{W_i} \ge {C_{{\rm{boundary}}}} \Rightarrow {x_i}为边界样本} \end{array}} \right. $

其中0 < Cinside < Cinit < Cquasi < Cboundary

遗忘因子作为参数用于在增量学习过程中调整内样本和准边界样本在训练样本中的规模。设遗忘因子为∂(0 < ∂ < 1),若内样本和准边界样本点总数为N,按照样本的权值进行降序排序,选取权值排名前∂N个样本数据加入到新一轮训练样本中,利用遗忘因子和样本权值有选择地淘汰对分类面建立影响较小的样本,有效减小训练样本规模。

1)权值初始化。

使用初始训练样本集T0训练SVM分类器C0得到SV集Tsv0和NSV(Non SV)集Tnsv0,并按下述规则为两个集合中的每个样本点赋予权值。

规则1:

①SV集中,若xi为BSV(Boundary SV)样本,令Wi=Cboundary,对其余的xi,令Wi=Cquasi

②NSV集中,令Wi=Cinit

对于增量训练样本集的每个样本点均初始赋予相同的权重,令Wi=Cinit

2)反馈迭代过程。

设当前训练样本集为Ti,所得临时分类模型为Ci,增量训练集为Ii,利用分类器Ci将测试集分为两类:正确分类样本集Oi,和错误分类样本集Ei。按照规则2为这两类样本分别调整权重。

规则2:

${x_i} \in {O^j} \Rightarrow {W_i} = \max (0, {W_i} - {j_{ok}})$

${x_i} \in {E^j} \Rightarrow {W_i} = {W_i} + {j_{err}}$

选取集合Ti的SV集TiSV和集合Ei中的所有样本,并在集合Ti的NSV集TiNSV和集合Oi中按权值排序并按照事先设定的遗忘因子∂选取一定比率样本组成新的训练集,在集合上使用分类算法进行训练得到分类器, 并按规则3为集中每一个样本调整权值。

规则3:

${x_i} \in SV({T^j}) \Rightarrow {W_i} = \max ({C_{quasi}}, l{W_i})$

${x_i} \in NSV({T^j}) \Rightarrow {W_i} = {W_i} - {j_{ok}}$

随着增量样本加入系统,重复上述步骤,多次训练中逐步积累起的关于样本空间分类特性的知识,按一定规则完成对增量样本中值得关注的样本信息的加入,逐渐减少对算法收敛影响较小的内样本和准边界样本,从而减小训练样本规模,提高算法学习速度。将该反馈迭代机制应用于基于Hadoop实现的SVM并行训练算法中,设计合理的遗忘因子,淘汰训练数据中的对分类模型建立作用不大的部分内样本和准边界样本,可在并不过于损失精度的基础上大大提高并行训练速度。

1.1.3 Controller控制迭代组件

由于传统的MapReduce框架处理迭代计算的效率不高,存在很多缺陷,所以,为了更好地控制迭代过程,设计基于HBase的Controller组件,在HBase中为Controller初始化一行存储其运行的相关信息。Controller主要有以下3个主要作用:1)进行迭代收敛条件的判断,有效控制迭代过程; 2)为Combine分配存储空间并负责融合Combine的输出结果,用于减小shuffle过程中大量键值对造成的网络消耗; 3)利用HBase在本地持久化训练样块对应的样本权值,在迭代训练中按照权值信息选择新一轮训练样本。具体实现在2.2节中介绍。Controller关于差错控制和负载均衡等设计由于篇幅原因不在此详细介绍。

1.2 PIASVM算法实现详解 1.2.1 数据划分阶段

利用t-test方法对数据集进行特征选择。如图 1中数据划分阶段所示。按照事先设定的分割系数(文中设定为1:4)将初始训练数据集分割为训练样本集T和增量样本集TD_inc,将TD分为N个分片,其中T={Splitk|Splitk≠∅}(k=1, 2, …, N),每一个Split对应一个Map操作。增量数据集TD_inc表示为:

$ TD\_inc = \{ TD\_in{c_k}|TD\_in{c_k} \ne \emptyset \}, k = 1, 2, \cdot \cdot \cdot \cdot 4 $

对于每一块增量数据TD_inck,在加入系统进行增量学习时进行分片,分片数设为N,根据1.1.2节中的规则1为每个增量数据子集中的样本设定相同的初始权值。

1.2.2 并行学习阶段

1)Controller组件初始化。

在HBase中为Controller初始化一个行存储组件的相关信息,该行包括一个标识控制迭代信息的ControllerFlag字段,一个存放controller java程序IP地址和TCP端口信息的ControllerPort字段,一个存放和融合后分类器信息的ControllerClassifier字段。

2)Ini_Map阶段。

Ini_Map运行时监听HBase中的ControllerFlag字段。

ControllerFlag=0,则为第一次训练,Controller组件负责为每个Map分配唯一的端口号,并在HBase中为其分配空间存放Map的相关信息。Ini_Map访问ControllerInfo字段获取控制组件的IP地址和端口信息,并利用TCP连接的方式让控制组件为其分配其唯一的ID编号作为Rowkey。在HBase数据库为该Rowkey初始化一个存储Map运行情况和样本权值的行,该行拥有2个字段,一个IniMapFlag字段保存任务的运行情况,一个IniMapDW字段保存训练样本的权值信息。最后,按1.1.2节中的规则1为样本初始化权重。

若不是第一次训练(设训练次数为i),需要根据训练样本权值列表确定新一轮训练样本。首先通过Controller组件中的ControllerClassifier字段获取本轮的分类器参数;紧接着,根据权值列表,选取当前训练样本Ti的SV集TiSV和集合Ei中的所有样本,并将Ti中的NSV集TiNSV和集合Oi中的样本按权值排序,根据事先设定的遗忘因子∂选取一定比率的训练样本。将两者结合起来,确定新一轮训练集Ti+1=Tisv+Ei+SUB(Tnsvi+Oi)。将存放于HBase中的增量过程中得到的Ei样本和部分Oi样本平均按照本地化数据传输的原则追加到HDFS中的初始训练样本中,并更新权值列表。

N个Mapper分别处理这N个训练子集,设算法迭代次数为T,如图 1中并行学习阶段所示,在每个训练子集上用Adaboost-SVM方法训练得到T个弱分类器;在训练过程中按照1.1.2节中的规则3为训练样本调整相应权值,并记录在HBase中的Rowkey所在的IniMapDW字段中。按照分类器权重将这T个弱分类器按降序排序形成有序表,记第i个分类器的下标为LiLi为第i个Classifier在有序表中的位置。将键值对{〈Li, Ci〉|i=1, 2, …, T}写入到context中作为Map的输出,同时将该行的IniMapFlag字段置为1。

3)Ini_Reduce阶段。

图 1中并行学习阶段所示,对Map中相同排序位置的分类器进行融合,得到T个组合分类器,组合分类器的话语权记为它的N个子分类器话语权的平均值。选取话语权最大的组合分类,将其分类模型参数写入到Controller组件的ControllerClassifier字段中。Controller监听HBase中N个Rowkey对应的IniMapFlag字段,当所有的该字段全为1的时表示一次训练过程完成,然后与迭代终止条件作判断。若符合则迭代终止,将组合分类器结果输出到HDFS中,若不符合,则将ControllerFlag字段设置为Inii,随后跳转到1.2.3节进行增量学习过程。

1.2.3 增量学习阶段

依次读取固定大小的一块增量数据TD_inck作为本轮增量数据驱动并将其分为N个split,每个split对应一个Map,主要目的是通过增量数据的权值标注,调整训练样本规模,根据权值淘汰无用样本,有选择地加入对分类模型建立有重要影响的样本。

从Controller组件的ControllerClassifier字段中获取上一阶段的组合分类器参数p。如图 1增量学习阶段所示,在每个Map过程中,利用参数p将分为增量数据分片分为正确分类样本O和错误分类样本E两类,并按照1.1.2节中的规则2调整权重。为减少Map和Reduce之间的数据传输,声明Combine任务融合Map输出结果,得到本轮计算得到的准确分类样本集Ei和错误分类样本集Oi。Controller组件为每个Combine分配在HBase唯一的端口号和存储空间。Combine对应的行拥有两个字段Edata和Odata,分别存放错误分类样本集和正确分类样本集。Combine任务将数据结果上传到HBase中以该ID编号为Rowkey的行的Edata字段和Odata字段中。Controller监控HBase中所有ID编号行的Flag字段,当所有的该字段全部为1时,ControllerFlag字段设置为INCi,表示对增量样本的处理完成,开始进行第i+1次迭代。跳转到并行学习阶段,根据权值调整新一轮训练样本的规模。

值得注意的是,在整个执行过程中,增量数据都是被缓存在Combine任务的内存中的,因此避免了大量增量样本数据在网络中的传送。Combine的输出结果并不需要耗费大量网络带宽进行规约融合,只需控制将错误分类样本和正确分类样本数据存储在HBase本地节点,当新一轮并行训练Controller组件会优先选择本地的增量数据加入到HDFS中的当前训练样本中。

2 实验分析 2.1 实验环境

实验硬件环境包含5台工作站主机,每台主机的配置为Intel E5440 2.83 GHz处理器,16 GB内存,1 TB硬盘。在以上5个计算节点的基础上构建Hadoop集群,其中1台被选为Hadoop和HBase的Master节点,4台作为Slave节点。软件运行环境为Ubuntu14.04、Hadoop0.20.2和JDK1.7.0-20。每台主机拥有独立的IP地址,通过前兆以太网进行连接。

在PIASVM算法框架下进行并行实验时,设定每个Map上的运行的分类算法Adaboost-SVM中SVM算法迭代次数为4(当抽样比例及迭代次数大于一定值时,算法的学习精度变化不明显。对于测试数据集希格斯粒子(HIGGS)而言,迭代次数T=4是最佳迭代次数)。为了验证算法对训练数据规模的控制能力,分析并行训练过程中实际训练样本数的变化情况。同时,实验采用加速比、数据伸缩度、扩展率作为指标分析PIASVM算法框架的并行化程度、算法时间复杂度和数据适应能力。并通过与其余两种算法--传统的非集成学习的并行增量学习模型(Parallel Incremental SVM, PISVM)、非增量学习的并行集成学习模型(Parallel Adaboost-SVM, PASVM)进行对比,来验证算法对处理大规模训练数据的优势。

实验数据选择来自DP01a的ijcnn1,PASCAL Challenge 2008的epsilon,UCI的HIGGS这3个各具特色的样本数据集,分别记为Data1、Data2、Data3。

2.2 遗忘因子控制下算法分类精度与样本数变化

使用PIASVM框架训练来自UCI的HIGGS样本数据,设定初始训练数据为340万,增量数据分4次加入训练模型,在不同的遗忘因子下测试算法的分类精度。从图 3所示的实验结果可知,根据遗忘因子淘汰部分内样本和准边界样本,可能会对分类器精度产生影响,但由于边界样本和准边界样本的存在,根据数据集设定合适的遗忘因子值,对分类精度的损失很小。随着遗忘因子的值的改变,分类精度曲线表现为抛物线形式,在遗忘因子从0.9下降到0.5时,分类精度变化并不明显,但之后分类精度下降较为明显,所以选择∂=0.5作为HIGGS数据集的遗忘因子。同理,经实验设定ijcnn1、epsilon样本集的遗忘因子分别为0.4、0.5。

图 3 HIGGS上测试结果

表 1可见,HIGGS训练数据集上设定遗忘因子为0.5时,随着增量学习的进行,减少的训练样本数在逐渐增加。从结果可见,PIASVM算法框架可以通过有选择地加入新样本和淘汰旧样本中内样本的方法显著减少训练样本数,提高SV集搜索收敛速度,有效提高训练速度。

表 1 样本变化情况
2.3 加速比、数据伸缩度和扩展率

1)加速比(Speedup)。

加速比被定义为在一台机器上运行所用时间与在m台机器上面运行时间之比。通常评测Speedup的方法是,保持数据不变,增加计算机的数目。本文固定训练数据大小,计算节点数从4核(单节点)到16核(4节点),当计算节点为4时,如图 4(a)所示,加速比最高提升到2.4,说明PIASVM算法框架拥有较好的并行化性能。随着数据的增加,加速比值增长,并行效率提高明显。这是因为当数据量较小时,相比通信和任务调度的时间消耗,处理小数据集的算法运行时间并不突出。虽然在初期,随着节点数据的增加,加速比得到了一定程度的提升,但是并不是节点数目越多,加速比越高,因为在增加处理器数量的同时也会增加额外的通信与控制消耗。

图 4 加速比和数据伸缩度实验结果

2)数据伸缩度(Sizeup)。

数据伸缩度通常被定义为在m*数据块(Data Block, DB)数据上面训练所用时间与在DB数据上面训练所用时间之比,衡量了算法处理不同规模训练数据的算法时间复杂度。实验中,本文将计算机核数分别固定为4、8、12、16,将训练数据从2 GB增加至8 GB。如图 4(b)可知,当数据规模为2 GB时,单节点系统的Sizeup值大约为1.7,而4节点系统的Sizeup值为1.25,差距并不明显,当随着数据规模的大幅度增加,4节点对应的Sizeup增长率明显低于单节点系统的Sizeup增长率,算法复杂度上单节点和多节点的差距越发明显。再者,由计算节点为4时的数据伸缩度曲线可知,当数据规模4GB附近曲线出现拐点,数据规模较小时,曲线变化较为平缓,但随着数据的增加,负载均衡和I/O通信等额外开销增加,曲线变得陡峭,但随着数据的持续增长又逐渐趋于平缓,可见PIASVM算法框架拥有很好的数据伸缩度表现。

3)扩展率(Scaleup)。

扩展率被定义为使用1个节点在DB数据上运行时间与使用m个节点在m*DB数据上运行所用时间之比。当面对不断增加的训练数据时,Scaleup值衡量了PIASVM算法通过增加计算节点拓展计算能力的表现。评测扩展率的方法是,在扩大数据的同时,增加计算机的数目。实验选取4个测试用例,分别为(2 GB, 4核)、(4 GB, 8核)、(6 GB, 12核)、(8 GB, 16核)。通常,如果Scaleup值随着m的改变,一直在1.0附近,或者更低,则表示该算法对数据集的大小有很好的适应性。实验中,Scaleup值一直处于0.88左右,可见PIASVM算法中Map、Combine操作的设计,Controller组件的应用使得计算有着很好的局部性特征,可以在较为理想的通信消耗内通过增加计算节点来扩展计算能力。

2.4 算法分类精度与训练时间对比分析

本节主要测试PIASVM算法模型在Data1、Data2、Data3这3个样本集上的学习精度和分类速度,并与PISVM算法、PASVM算法进行对比。

PISVM在并行训练过程中选择传统SVM算法作为基础分类算法进行训练,利用KTT(Karush-Kuhn-Tucker)条件进行增量学习,如表 2所示,在3类实验数据中,增量学习的各个阶段PISVM的分类精度均低于PIASVM算法。可见PIASVM算法中,集成学习策略与SVM算法的结合有效提高了单分类器表现,特别在ijcnn1和HIGGS数据集上对分类精度有较大提升;与此同时,PIASVM算法采用基于遗忘因子的增量学习策略并利用基于HBase的Controller组件优化迭代过程,虽然PIASVM算法相比PISVM算法增加了基础分类算法的迭代,但表 3中的实验结果表明,在HIGGS数据集上,PIASVM算法在PISVM算法的基础上减小了5.6%的时间消耗。

表 2 3种方法的分类精度对比%
表 3 HIGGS数据上3种方法训练时间对比

PASVM作为基于集成学习的SVM并行分类算法,虽然在分类精度上比PIASVM算法略好,但是如表 3所示,当处理较大规模数据集时,PASVM算法牺牲了大量的训练时间,较之PIASVM增加了36.7%的训练时间。相对于PASVM仅对大量数据进行一次并行训练,PIASVM将数据分为初始数据与增量数据,以基于遗忘因子的增量学习的策略减小了训练规模,可以有效降低算法的时间复杂度。在数据集较小时,PIASVM由于迭代操作及任务调度的时间消耗,训练速度上表现不如PASVM算法,但当处理大规模数据集时,PIASVM的优势愈发明显。根据文中2.2节所述,设定合适的遗忘因子值,部分无用样本的淘汰对算法分类精度的影响很小,基本持平。可见PIASVM算法较之PASVM在保证精度的基础上明显提高了数据处理速度。

3 结语

本文提出的PIASVM算法模型,在利用集成学习策略保证分类精度的同时,通过对样本进行迭代加权调整样本规模,加快算法收敛。该框架充分利用了Hadoop框架的并行计算能力,并设计Controller组件在原有Hadoop的基础上控制并优化迭代过程。通过实验表明,该算法框架在加速比、扩展率、数据伸缩度上均有较好的表现。考虑到Hadoop框架处理迭代计算的困境,可以利用基于分布式内存的Spark框架来改善迭代性能,再者,增量学习思路可以在现有基础加入热开始,最大限度重用过去的解。

参考文献
[1] SALLEH N S M, SULIMAN A, AHMAD A R. Parallel execution of distributed SVM using MPI (CoDLib)[C]//Proceedings of the 2011 International Conference on Information Technology and Multimedia. Piscataway, NJ:IEEE, 2011:1-4.
[2] GRAF H P, COSATTO E, BOTTOU L, et al. Parallel support vector machines:the cascade SVM[C]//NIPS 2004:Advances in Neural Information Processing Systems 17. Red Hook, NY:Curran Associates, Inc., 2004:521-528.
[3] ZHANG J P, LI Z W, YANG J. A parallel SVM training algorithm on large-scale classification problems[C]//Proceedings of the 2005 International Conference on Machine Learning and Cybernetics. Piscataway, NJ:IEEE, 2005, 3:1637-1641.
[4] CARUANA G, LI M, LIU Y. An ontology enhanced parallel SVM for scalable spam filter training[J]. Neurocomputing, 2013, 108 (5) : 45-57.
[5] LU Y, ROYCHOWDHURY V, VANDENBERGHE L. Distributed parallel support vector machines in strongly connected networks[J]. IEEE Transactions on Neural Networks, 2008, 19 (7) : 1167-1178. doi: 10.1109/TNN.2007.2000061
[6] POGGIO T, CAUWENBERGHS G. Incremental and decremental support vector machine learning[J]. Advances in Neural Information Processing Systems, 2001, 13 : 409-415.
[7] KATAGIRI S, ABE S. Incremental training of support vector machines using hyperspheres[J]. Pattern Recognition Letters, 2006, 27 (13) : 1495-1507. doi: 10.1016/j.patrec.2006.02.016
[8] SHILTON A, PALANISWAMI M, RALPH D, et al. Incremental training of support vector machines[J]. IEEE Transactions on Neural Networks, 2005, 16 (1) : 114-131. doi: 10.1109/TNN.2004.836201
[9] DO T N, NGUYEN V H, POULET F. GPU-based parallel SVM algorithm[J]. Journal of Frontiers of Computer Science and Technology, 2009, 3 (4) : 368-377.
[10] HE Q, DU C, WANG Q, et al. A parallel incremental extreme SVM classifier[J]. Neurocomputing, 2011, 74 (16) : 2532-2540. doi: 10.1016/j.neucom.2010.11.036
[11] LÄMMEL R. Google's MapReduce programming model-revisited[J]. Science of Computer Programming, 2008, 70 (1) : 1-30. doi: 10.1016/j.scico.2007.07.001
[12] SRIRAMA S N, BATRASHEV O, JAKOVITS P, et al. Scalability of parallel scientific applications on the cloud[J]. Scientific Programming, 2011, 19 (2/3) : 91-105.
[13] 萧嵘, 王继成, 孙正兴, 等. 一种SVM增量学习算法α-ISVM[J]. 软件学报, 2001, 12 (12) : 1818-1824. ( XIAO R, WANG J C, SUN Z X, et al. A kind of incremental SVM learning algorithm α-ISVM[J]. Journal of Software, 2001, 12 (12) : 1818-1824. )