基于MapReduce框架的支持向量机最优分类模型参数搜索的方法与流程

文档序号:18554940发布日期:2019-08-30 22:28阅读:160来源:国知局
基于MapReduce框架的支持向量机最优分类模型参数搜索的方法与流程

本发明涉及机器学习及人工智能算法领域,尤其涉及一种基于mapreduce框架的支持向量机最优分类模型参数搜索的新方法。



背景技术:

支持向量机分类模型的建立需要经过大量的计算,随着训练样本集规模的增长,不仅会大量消耗主机的cpu及内存资源,而且训练模型所需要时间也会急剧增加,从而使得在单机环境下得到模型变得很困难。hadoop平台下的分布式计算框架mapreduce(其中map为映射,reduce为归约)及spark为并行化训练大规模数据集提供了新的方法和手段,在分布式计算框架的支持下,支持向量机分类模型的训练过程可以并行化,从而显著缩短了得到模型所需要的时间。为了让支持向量机分类模型能够更鲁棒的用于实际数据的预测及解决线性不可分问题,在模型的训练过程中,需要对模型的参数进行选择,从而得到最优的模型。



技术实现要素:

本发明的目的在于在合理利用集群内存资源及保证进行交叉验证的reduce任务充分并行执行的前提下,显著减少最优模型参数的获取时间。

为达上述目的,本发明提供一种基于mapreduce框架的支持向量机最优分类模型参数搜索的方法,包括以下步骤:

a、在map阶段为每组参数赋予不同的键值,使得在reduce阶段每个并行执行的任务只对一组参数进行交叉验证;

b、以串行mapreduce作业执行方式或者单个mapreduce作业执行方式选择支持向量机最优分类模型的最优参数。

接上述技术方案,步骤a中每个并行执行的reduce任务只对一组参数进行交叉验证具体为:

a1、生成需要进行搜索的n个参数组(ci,γi),0<i≤n,ci为惩罚参数,控制支持向量机模型如何处理错误;γi为高斯核函数参数,高斯核函数负责将线性不可分的问题转换为线性可分的问题;

a2、将每组参数以一个文件的形式存入到hadoop集群中的hdfs文件系统;

a3、在map阶段,每个map任务读取存储在hdfs文件系统中的参数文件,并为每个参数文件形成一个具有唯一键值的中间结果;

a4、在reduce阶段,执行参数交叉验证的reduce任务的个数与中间结果的个数一致,每个reduce任务只对一组参数进行交叉验证。

接上述技术方案,串行mapreduce作业执行方式具体为:

限制并发执行的reduce的任务个数,一种限制reduce任务个数的方式为将需要选择的m个参数划分为n个mapreduce作业(job1,job2,…,jobn-1,jobn),n≥1,其中(job1,job2,…,jobn-1)执行m/n个参数的验证,jobn执行m%n个参数的验证,(job1,job2,…,jobn-1)在jobtrack的控制下串行执行;

单个mapreduce作业执行方式具体为:只启动mapreduce作业一次,让m个reduce任务全部处于就绪状态,限制获得资源并行执行的reduce的任务个数为k,k≤m;当某个reduce任务执行完成后,处于就绪等待队列中的某个reduce任务获得资源开始执行,直到就绪队列中的所有reduce任务执行完成。

接上述技术方案,串行mapreduce作业执行方式适用于并行执行的各个reduce任务的完成时间差异不大的细粒度最优参数搜索;单个mapreduce作业执行方式适用于并行执行的各个reduce任务的完成时间差异大的粗粒度最优参数搜索。

本发明产生的有益效果是:本发明在分布式hadoop集群环境下,使用mapreduce框架进行支持向量机最优分类模型参数选择。该方法在map阶段读取存储在hdfs中的参数文件,并为每组参数生成具有不同键值的中间结果,以保证在reduce阶段,每个并行执行的任务仅对一组参数进行交叉验证。为保证集群内存的合理消耗,该方法能以串行及单个mapreduce作业这两种方式完成最优模型参数的选择,串行mapreduce作业方式适用于并行执行的各个reduce任务的完成时间差异不大的细粒度最优参数搜索,单个mapreduce作业方式适用于reduce任务的完成时间差异较大的粗粒度最优参数搜索。实验结果表明,通过选择合适的mapreduce作业方式,设置适当的reduce任务数量,可以在保证在集群内存资源合理消耗的前提下,显著的提高最优模型参数获取的时间性能。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1a为本发明实施例基于mapreduce框架的支持向量机最优分类模型参数搜索的方法流程图一;

图1b为本发明实施例基于mapreduce框架的支持向量机最优分类模型参数搜索的方法流程图二;

图2为本发明实施例基于mapreduce框架的最优模型参数选择过程;

图3为本发明实施例串行mapreduce作业方式;

图4为本发明实施例单个mapreduce作业方式;

图5为本发明实施例串行mapreduce作业方式实验数据图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明提出了一种在mapreduce框架下进行最优模型参数选择的新方法,该方法能够在合理利用集群内存资源及保证进行交叉验证的reduce任务充分并行执行的前提下,显著减少最优模型参数的获取时间。

对于给定的训练数据集:设超平面系数为w=(w0,w1,…,wn),截距为b,则求解用于分类的支持向量机最优超平面的原问题描述为:

subjecttoyi(w·xi+b)-1≥0i=1,2,…,m(1)

式(1)表示在满足条件yi(w·xi+b)-1≥0的约束下,超平面系数向量w的模最小,从而使得超平面距离支持向量的物理间距最大。解决支持向量机原问题实际上是在约束条件的限定下,求凸二次型的最小值问题,由于qp算法只适用少量的数据集,故一般使用对偶规则来求解支持向量机最优超平面,求解支持向量机最优超平面的对偶问题描述为:

subjectto0≤ai≤ci=1,2,…,m(2)

其中m为支持向量的个数,ai为支持向量对应的拉格朗日算子。

c为惩罚参数,控制支持向量机模型如何处理错误,对于线性可分问题,合适的c值可以使得超平面间距最大,同时出现的分类错误最少。没有一个特定的c值可以解决所有的线性可分问题,对于具体的问题,最优的c值只能通过实验的方法得到。

对于线性不可分问题,可以通过核函数将数据映射到多维空间,使其线性可分。核函数k的返回值是数据点在转换为多维空间向量后的内积值,核函数k的形式化定义为:给定一个映射函数x→v,函数k:x→r,定义表示x,x′在转换为后在v中的内积。核函数的类型有线性核函数、多项式核函数、高斯核函数等。实践证明,使用高斯核函数对线性不可分问题进行分类,一般可以取得较好的效果,故在选择核函数时,高斯核函数一般是首选。高斯核函数的描述为:

k(x,x′)=exp(-γ‖x-x′‖2)(3)

参数γ和c值一样需要通过实验得到其最优值,取得最优值的实验为采用交叉验证的格搜索方法(gridsearch)。对于一组给定的(ci,γi),交叉验证的过程为将训练集划分为大小相同的n个等份,依次取其中的第i份为测试集testi,i=(1,2,…,n),剩下的n-1份为训练集,使用根据训练集得到的模型预测testi,得到预测准确率accui,整个交叉验证的准确率为:

上述的过程称为n重(n-fold)交叉验证。n-fold交叉验证使得整个训练集中的数据均被预测,其准确率为整个训练集中的数据被正确分类的百分比,故n-fold交叉验证能有效的避免模型的过拟合(overfitting)问题。最优模型参数的选择就是在参数集合使用交叉验证得到每组参数的取准确率最高的参数(ci,γi)为最优模型参数。使用格搜索得到最优模型是个非常耗时的过程,假设参数集合p的参数组数为m,每组参数进行n重交叉验证,每一次交叉验证的平均时间为s秒,若为串行执行,格搜索的总时间为:

gstotal=m*n*s(5)

可见格搜索的时间随着参数组数m及交叉验证的重数n而线性增长。在格搜索的过程中,由于对某组参数进行交叉验证的过程与其它参数组无关,故多组参数的交叉验证过程可以并行执行,从而缩短格搜索得到最优模型所需要的时间。

本发明实施例的基于mapreduce框架的支持向量机最优分类模型参数搜索的新方法,如图1和图2所示,包括以下步骤:

a、在map阶段为每组参数赋予不同的键值,使得在reduce阶段每个任务只对一组参数进行交叉验证,从而保证支持向量机最优分类模型参数搜索的过程并行执行,加快最优参数的获取速度。

b、定义执行支持向量机最优参数选择的方法,该方法以串行mapreduce作业执行方式及单个mapreduce作业执行方式两种模式运行。串行mapreduce作业执行方式模式适用于并行执行的各个reduce任务的完成时间差异不大的细粒度最优参数搜索。单个mapreduce作业执行方式模式适用于并行执行的各个reduce任务的完成时间差异大的粗粒度最优参数搜索。

进一步地,步骤a中每个并行执行的reduce任务只对一组参数进行交叉验证的方法为:

a1、为支持向量机分类模型生成需要进行搜索n个参数组(ci,γi),0<i≤n。ci为惩罚参数,控制支持向量机模型如何处理错误,合适的ci值可以使得超平面间距最大,同时出现的分类错误最少。γi为高斯核函数参数,高斯核函数负责将线性不可分的问题转换为线性可分的问题。

a2、将每组参数(ci,γi)以一个文件的形式存入到hadoop集群中的hdfs文件系统。

a3、在map阶段,每个map任务读取存储在hdfs文件系统中的参数文件,并为每个参数文件形成一个具有唯一键值的中间结果。

a4、在reduce阶段,由于包含参数(ci,γi)的中间结果具有不同的键值,同时,通过算法设置的执行参数交叉验证的reduce任务的个数与中间结果的个数一致,从而保证每个reduce任务只对一组参数进行交叉验证,使得参数搜索的过程并行执行,加快了支持向量机最优分类模型参数的获取速度。

进一步地,步骤b所述的执行支持向量机最优参数选择的方法为:

b1、串行mapreduce作业执行方式

当并发执行的reduce任务个数到达一定阈值后,集群的内存资源将被全部占用,从而导致其它的mapreduce作业由于缺少内存资源而无法执行。因此必须限制并发执行的reduce的任务个数。一种限制reduce任务个数的方式为将需要选择的m个参数划分为n个mapreduce作业(job1,job2,…,jobn-1,jobn),n≥1,其中(job1,job2,…,jobn-1)执行m/n个参数的验证,jobn执行m%n个参数的验证,(job1,job2,…,jobn-1)在jobtrack的控制下串行执行。

b2、单个mapreduce作业执行方式

另一种方式为单个mapreduce作业方式,既只启动mapreduce作业一次,让m个reduce任务全部处于就绪状态,但限制能获得资源并行执行的reduce的任务个数为k,k≤m。当某个reduce任务执行完成后,处于就绪等待队列中的某个reduce任务获得资源开始执行,直到就绪队列中的所有reduce任务执行完成。

定义进行支持向量机最优参数选择的算法。

基于mapreduce框架的支持向量机最优分类模型参数获取的算法svmbms描述为:

1.输入目录中的文件个数,参数文件存储路径,交叉验证的重数;

2.记录作业的开始时间;

3.写入参数文件到hdfs;

4.调用mapreduce作业类itermodelsel,新建mapreduce作业类实例;

5.启动mapreduce作业;

6.等待作业完成后,删除已经使用的参数文件;

7.输出最优模型选择的运行总时间。

算法中所调用的mapreduce作业类itermodelsel定义:

1.获取运行环境配置;

2.实例化mapreduce作业;

3.将训练数据集及libsvm包缓存到集群;

4.设置参数文件输入目录;

5.设置并行执行的reduce个数;

6.设置集群允许并行执行的reduce个数;

7.完成map及reduce任务的类及其它运行参数设置;

8.执行任务。

算法中的map任务定义

作业类itermodelsel中的map任务读取存储在hdfs文件系统中的参数文件,并以<key,value>的形式写成,交给reduce处理,其算法modeselectmap描述为:

1.读取参数文件的所有内容;

2.为map任务分配的唯一id;

3.将参数文件以<key,value>形式写入到集群环境的中间文件。

算法中的reduce任务定义

存储在hdfs文件系统中的参数文件经过map任务处理后,由于各自的key值不同,所以mapreduce框架的jobtrack把每组参数交给一个reduce任务来处理,从而使得模型的选择过程并行化,reduce任务的modeselectredue算法如下所示:

1.读取参数(ci,γi);

2.获取缓存的训练集文件的路径;

3.读取训练集文件;

4.将训练集转换为libsvm包需要的格式;

5.记录交叉验证开始时间;

7.调用libsvm包进行交叉验证;

8.统计预测正确的结果值;

9.计算正确率;

10.计算交叉验证完成的所需要的时间;

11.将参数(ci,γi)及训练结果,总耗时等信息写入到hbase表。

在分布式集群环境下,mapreduce框架负责处理并行计算中的分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题。mapreduce框架采用“分而治之”的策略,其的核心步骤主要分两部分:map和reduce。在向mapreduce框架提交一个计算作业后,mapreduce会首先把作业拆分成若干个map任务,然后分配到不同的节点上去执行,每一个map任务处理输入数据中的一部分,当map任务完成后,它会生成一些中间文件,这些中间文件将会作为reduce任务的输入数据。reduce任务的主要目标就是把前面若干个map的输出进行处理并给出结果。mapreduce框架的作业配置非常灵活,可以指定只单独运行map或者reduce任务;指定完成具体任务的reduce的个数;通过key值指定map任务与reduce任务的对应关系等。本文提出的最优模型参数选择方法首先在map任务中读取存储在hdfs文件系统中的参数文件,然后在reduce任务中进行模型的训练及交叉验证,得到模型的准确率。基于mapreduce的支持向量机最优分类模型参数选择的过程如图2所示。

分布式集群环境下的最优模型选择的核心思想就是让多组参数可以同时训练,以缩短得到最优模型参数的时间。将需要训练的参数集合参数中的每组参数(ci,γi)以一个文件的方式写入到hdfs文件系统,当文件的个数达到指定的阈值n(n≤m)时,启动mapreduce作业,通过重载map任务读取文件的模式,使得每个map任务读取输入参数文件的所有内容,在确保key唯一后,将<key,参数>写入到中间文件。由于每组参数的key值不同,且reduce的个数设置为n,所以jobtrack可以保证每个reduce任务只训练一组参数。每个reduce任务读取缓存在集群内存中的训练数据集文件及调用缓存在集群中的libsvm包中的方法训练模型并进行交叉验证,模型训练的结果写入hbase数据库,以便对训练过程进行统计分析。

由于每组参数的交叉验证过程在reduce任务中完成,增加reduce的任务并发数显然可以加快获得最优模型参数的速度。但当并发执行的reduce任务个数到达一定阈值后,集群的内存资源将被全部占用,从而导致其它的mapreduce作业由于缺少内存资源而无法执行。因此必须限制并发执行的reduce的任务个数。一种限制reduce任务个数的方式为将需要选择的m个参数划分为n个mapreduce作业(job1,job2,…,jobn-1,jobn),n≥1,其中(job1,job2,…,jobn-1)执行m/n个参数的验证,jobn执行m%n个参数的验证,(job1,job2,…,jobn-1)在jobtrack的控制下串行执行,执行过程如图2所示。

图3中的每个jobi中并行执行m/n个或者m%n个reduce任务,矩形条表示每个reduce任务的完成时间。由于jobi为串行执行方式,所以使用该方式进行最优参数选择的总时间为:

式(6)表示找到最优参数所需要的总时间为每个jobi中耗时最长的哪个执行交叉验证的reduce任务完成时间的和。

另一种方式为单个mapreduce作业方式,既只启动mapreduce作业一次,让m个reduce任务全部处于就绪状态,但限制能获得资源并行执行的reduce的任务个数为k,k≤m。当某个reduce任务执行完成后,处于就绪等待队列中的某个reduce任务获得资源开始执行,直到就绪队列中的所有reduce任务执行完成。单个mapreduce作业方式的执行过程如图3所示。

单mapreduce作业方式只在执行最后一批k个reduce任务时,需要等待耗时其中最长的任务执行完成,其它情况下,耗时的任务将和其它任务一起并行执行。

通过比较两种mapreduce作业方式可以发现,串行mapreduce作业方式调度简单,不需要维护额外的reduce任务就绪队列及等待任务执行,但当作业中存在耗时的reduce任务时,会显著增加整个作业的完成时间,因此串行mapreduce作业方式适合并行执行的各个reduce任务的完成时间差距不大的细粒度最优参数搜索。单个mapreduce作业方式只向集群提交一次作业,如果运行失败,整个参数选择的过程必须重做。但当作业中包括耗时的reduce任务时,该作业方式可以使得耗时的任务和其它任务同时执行,从而加快最优参数的获取速度,因此单个mapreduce作业方式适合reduce任务的完成时间差距较大的粗粒度最优参数搜索。支持向量机最优模型参数选择的bmsdriver算法描述如下:

1.输入目录中的文件个数,参数文件存储路径,交叉验证的重数;

2.记录作业的开始时间;

3.写入参数文件到hdfs;

4.新建mapreduce作业类实例;

5.启动mapreduce作业;

6.等待作业完成后,删除已经使用的参数文件;

7.输出最优模型选择的运行总时间。

算法1中reducenums参数用于控制作业中并发执行的reduce任务的个数,reducenumsallowed参数用于控制集群中允许执行的reduce任务的个数。当reducenums≤cnum×gnum,reducenumsallowed=reducenums时为串行mapreduce作业方式。当reducenums=cnum×gnum,reducenumsallowed=k,k≤reducenums时为单个mapreduce作业方式。

算法1中调用的mapreduce作业类itermodelsel用于集群环境的配置,参数的设置,作业的启动,具体描述为:

1.获取运行环境配置;

2.实例化mapreduce作业;

3.将训练数据集及libsvm包缓存到集群;

4.设置参数文件输入目录;

5.设置并行执行的reduce个数;

6.设置集群允许并行执行的reduce个数;

7.完成map及reduce任务的类及其它运行参数设置;

8.执行任务。

作业类itermodelsel中的map任务读取存储在hdfs文件系统中的参数文件,并以<key,value>的形式写成,交给reduce处理,其算法modeselectmap描述为:

1.读取参数文件的所有内容;

2.为map任务分配的唯一id;

3.将参数文件以<key,value>形式写入到集群环境的中间文件。

存储在hdfs文件系统中的参数文件经过map任务处理后,由于各自的key值不同,所以mapreduce框架的jobtrack把每组参数交给一个reduce任务来处理,从而使得模型的选择过程并行化,reduce任务的算法modeselectredue如下:

1.获取缓存的训练集文件的路径;

2.读取训练集文件;

3.将训练集转换为libsvm包需要的格式;

4.记录交叉验证开始时间;

5.调用libsvm包进行交叉验证;

6.统计预测正确的结果值;

7.计算正确率;

8.计算交叉验证完成的所需要的时间;

9.将参数(ci,γi)及训练结果,总耗时等信息写入到hbase表。

reduce任务中的交叉验证过程直接调用libsvm包中的方法完成,训练数据集中的输入特征需要按libsvm规定的稀疏矩阵格式进行压缩,输入特征值一般需要进行归一化处理,避免特征值之间的数量级差距过大对训练算法的影响。将每个reduce任务完成的对每组参数进行交叉验证的结果写入hbase表,以便对数据进行统计分析,得到最优模型的参数及其它性能指标。hbase的表结构如表1所示:

表1.运行结果存储hbase表结构

为验证算法的正确性及比较最优模型参数获取的时间性能,进行以下的实验验证。实验用服务器为dellpoweredger720,其配置为两个物理cpu(intelxeone5-2620v22.10ghz,每个cpu含6个内核,共12个内核),32g内存,8t硬盘,4个物理网卡。服务器安装vmwareesxi6.0.0操作系统,虚拟化整个服务器环境。客户端使用vmwarevsphereclient6.0.0将服务器划分为4个虚拟机,每个虚拟机的配置为3内核cpu,8g内存,2t硬盘,1个物理网卡。每个虚拟机安装ubuntu-16.04.1-server-amd64操作系统,hadoop2.7.3分布式计算平台,组成含1个主节点,4个数据节点(主节点也是数据节点)的集群。实验选用https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/中的a8a二分类训练数据集,a8a共包含22696条数据,大小在1.6m左右。

首先进行粗粒度参数选择,比较在reduce任务完成时间差距较大时,串行mapreduce作业方式和单个mapreduce作业方式在最优模型参数选择时的时间性能和集群内存消耗上的差别。在算法1中设置参数nr_fold=4,cnum=8,c初始值为0,递增步长为1,搜索范围为0~7。参数gnum=8,γ的初始值为0,递增步长为10-1,搜索范围为0~10-7。ci×γi的笛卡尔积为64,在这64组参数中进行粗粒度搜索。设置算法1中的reducenums/reducenumsallowed参数分别为4/4,8/8,16/16,32/32,64/64,既reducenums≤cnum×gnum,reducenums=reducenumsallowed进行串行mapreduce作业方式实验,得到的实验数据如表2及图5所示。

表2.粗粒度参数选择串行mapreduce作业方式实验数据表

表2中的reduce任务的最快、最慢及平均完成时间,均通过查询统计bmsresult表得到,具体过程在此不详细描述。结合表2及图4分析可以发现,1)集群内存资源的消耗随着并行执行的reduce的任务个数的增加而增加,当reduce的任务数量达到32个时,内存被100%全部占用,无法得到内存资源的reduce任务只能等待正在执行的任务完成后,再由jobtrack调度执行。2)reduce任务的平均完成时间,随着并行执行的任务数的增加而增加,说明当集群并发任务数多时,cpu的调度和内存资源的分配紧张,reduce完成任务的时间增加。3)获取最优参数的总训练时间,随着并行执行的reduce的任务的个数的增加,mapreduce作业启动的次数的减少而下降,说明虽然任务并发个数多时,完成每个reduce任务的平均时间虽然增加,但由于reduce任务的并发度增加,获得最优参数的总时间相反会下降。

设置算法1中的reducenums/reducenumsallowed参数分别为64/4,64/8,64/16,既reducenums=cnum×gnum,reducenumsallowed<reducenums进行单个mapreduce作业方式实验,得到的实验数据如表3所示:

表3.粗粒度参数选择单个mapreduce作业方式实验数据表

比较表2中实验1-3及表4的中实验6-8,可以发现在内存消耗相等时,粗粒度参数选择单个mapreduce作业方式获取最优参数的总时间均优于串行mapreduce作业方式。比较实验8与实验3,在内存消耗相等的情况下,获取最优模型的时间性能提高(4559-3506)/3506≈30%;比较实验8与实验4-5,可以发现单个mapreduce作业方式在仅消耗集群56%的内存时,获取最优参数的时间与串行mapreduce作业方式消耗100%内存时相近。通过上述实验得到的结论是,单个mapreduce作业执行方式模式适用于并行执行的各个reduce任务的完成时间差异大的粗粒度最优参数搜索。

其次进行细粒度粒度参数选择,比较在reduce任务完成时间差距不大时,串行mapreduce作业方式和单个mapreduce作业方式在最优模型参数选择时的时间性能和集群内存消耗上的差别。设置参数nr_fold=4,cnum=8,c初始值为0.5,递增步长为0.25,搜索范围为0.5-2.25。参数gnum=8,γ的初始值为0.05,递增步长为0.0125,搜索范围为0.05-0.1375。设置算法1中的reducenums/reducenumsallowed参数分别为4/4,8/8,16/16,64/4,64/8,64/16,得到的实验结果如表4所示。

表4.细粒度参数选择串行/单个mapreduce作业方式对比实验数据表

比较表4中的实验次数1-3及4-6,可以发现在进行细粒度参数选择时,当reduce任务的完成时间差距不大时,在同等内存消耗的情况下,串行mapreduce作业方式与单个mapreduce作业方式在获取最优模型参数时的时间性能上差距不大。通过上述实验得到的结论是,串行mapreduce作业执行方式模式适用于并行执行的各个reduce任务的完成时间差异不大的细粒度最优参数搜索。

应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1