基于分布式K近邻的护舷撞击能量预测法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于分布式K近邻的护舷撞击能量预测法
冯巍;邱占芝;宋旭东
【摘要】针对开敞式码头系泊作业中护舷撞击能量即时预测问题,提出一种基于大数据的分布式K近邻预测法.阐述传统K近邻算法在预测护舷撞击能量时的主要步骤;介绍MapReduce分布式框架的工作原理,给出K近邻算法在MapReduce计算框架下的实现方法,以及交叉验证确定最佳k值的步骤.对算法进行仿真实验,实验结果表明了不同k值对算法预测结果的影响,选取合适k值进行预测时,算法具有较高的准确性.通过将传统K近邻非参数回归方法与大数据Hadoop分布式集群技术相结合,实现海量数据的护舷撞击能量的有效预测,为系泊作业决策提供技术支撑和决策依据.%To immediately forecast the impact energy of fender during the ship moored at open sea terminal,a distributed K-nearest neighbor forecasting method based on BigData was advanced.Four processes of K-nearest neighbor forecasting method were presented for impact energy of fender.The operating principle of MapReduce was presented.K-nearest neighbor method and MapReduce were then combined.The best k-value was found by the means of cross-validation.The proposed algorithm was tested with anolog data.The results show that k-values have different impacts on forecasting results.When using the better k-value,more accurate forecasting results are found.By the combination of the K-nearest neighbor forecasting method and the Hadoop distribu ted cluster,the impact energy of fender with mass data is efficiently forecasted,providing technical supports and evidences for mooring operation decision-making.
【期刊名称】《计算机工程与设计》
【年(卷),期】2017(038)010
【总页数】5页(P2740-2744)
【关键词】护舷撞击能量预测;预测方法;大数据;K近邻;分布式
【作者】冯巍;邱占芝;宋旭东
【作者单位】大连交通大学软件学院,辽宁大连116028;大连交通大学软件学院,辽
宁大连116028;大连交通大学软件学院,辽宁大连116028
【正文语种】中文
【中图分类】TP311
护舷撞击能量表示护舷因船舶撞击受力所吸收的能量。
当码头因环境或人为等因素导致护舷撞击能量超过护舷能承受的范围时,就会对船舶或者护舷造成损坏,发生系泊事故。
对护舷撞击能量进行预测,可以改变码头系泊的被动局面,防患于未然。
随着信息技术和监测技术的发展,码头系泊监测数据急剧增加。
为了从监测数据中挖掘有用的信息提供更好的服务,必须采用数据挖掘技术。
其中K近邻算法是一
种常用的数据挖掘算法,其简单直观的优点,得到各个领域的青睐[1-3]。
K近邻
算法的预测效率取决于对近邻查找的开销,历史数据集规模越大,查找的开销也随之越高[4],因此K近邻算法很难胜任大数据处理任务。
经过充分调研,本文的解
决办法是将传统的K近邻算法部署到分布式Hadoop集群中,利用MapReduce
框架实现算法的并行化。
这样做大大减少了预测时间,提高了预测效率,满足了护舷撞击能量实时预测的需求。
K近邻算法的核心思想是:根据待预测项状态向量X(n),从历史数据集中使用合
适的距离公式找出k个距离X(n)最近的状态向量k1(n),k2(n)…kk(n)作为k向量集,最后对k向量集做加权处理,处理结果作为预测结果。
根据算法的核心思想,设计预测护舷撞击能量K近邻算法需要以下4个步骤:(1)撞击能量影响因素提取
本文假定船舶处于波浪作用下的无缆绳作用情况,护舷对码头的撞击作用主要由横移和横摇运动产生。
护舷的撞击能量其实是船舶的运动量和船舶载量综合作用的结果。
经分析得出护舷撞击能量和波高、周期、海水重度、水深、船舶特性等存在特定关系。
本文使用关系公式模拟的数据作为历史数据集,关系公式来自参考文献[5]。
(2)状态向量距离测度公式
K近邻算法的一个核心问题是距离测度的选择[6]。
距离度量公式有欧式距离、曼
哈顿距离[7]、切比雪夫距离、闵可夫斯基距离等度量方法,不同的度量方式对实
验结果会产生不同影响。
就本文预测的护舷撞击能量而言,通过使用欧氏距离,曼哈顿距离和切比雪夫距离公式分别进行实验,结果发现使用曼哈顿距离计算的结果误差更小,所以本文选用曼哈顿距离公式
式中:di表示当前数据与历史数据集中第i项的曼哈顿距离;ωk表示当前数据中第k个分量的权重;ak表示当前数据中第k个分量的数值;bik表示历史数据集
中第i组历史数据中第k个分量的数值。
(3)确定近邻k的个数
近邻k代表历史数据集中与预测数据最为相似的数据组数。
k值的选取会影响预测集的维度[8],而维度的大小又影响预测结果。
本文通过交叉验证[9]的方式来选取
合适的k值。
(4)计算预测分类结果
完成上述步骤之后,我们只需要对k向量集中的数据进行平均化处理即可得到最
后的结果。
考虑到k向量集中的数据与预测数据的距离并不相等,它们对预测结
果的影响就不尽相同。
本文对k向量集中的数据进行加权处理,权重与数据间的
距离和k大小有关
式中:di代表k向量集中第i个数据与预测数据间的距离;t代表k个di的和;
ωi代表k向量集中第i个数据的权重。
应用上述公式对k向量集中的数据进行加权处理。
不仅能实现权重的归一化,而
且还使权重与数据间的距离负相关,即数据间的距离越大,则权重越小,反之亦然。
MapReduce的工作原理:MapReduce主要分为map阶段和ruduce阶段。
在map阶段之前,MapReduce根据输入文件计算输入切片(input split),每个切片对应一个map任务。
在map阶段,MapReduce将输入数据按行解析成<k1,v1>键值对形势,再按照map方法,将输入键值对以<k2,v2>键值对形势输出。
接着combiner阶段对
<k2,v2>进行合并操作,将有相同key值的v2合并成集合v2s,把合并后的数据传输给reduce阶段。
在reduce阶段,Map-Reduce根据reduce方法的要求,将数据进行最后处理并以<k3,v3>键值对的形势输出给HDFS[10]。
图1为MapReduce的计算框架模型。
系泊监控系统作业会存储大量的护舷撞击能量和其影响因素的历史数据。
如果把护舷撞击能量影响因素和对应的护舷撞击能量组成一条数据,那么每条数据间没有联系,可以单独在分布式系统中运行互不影响,这符合MapReduce并行化计算思
想[11]。
为了方便MapReduce处理数据,本文将护舷撞击能量影响因素和对应
的护舷撞击能量以行形势存储成文本格式,数据之间用“,”分隔。
将文本上传到HDFS,MapReduce自动将文本以行进行分片,不需要编写代码实现。
图2描述了整体方法框架。
(1)Map方法设计
Map方法首先以键值对<每行首字符号,记录行>的形式接收来自HDFS的数据切片。
然后按行的形式读切片上的数据,并把每行数据以“,”分割,以字符串数组形式存储,方便数据进行后续操作。
将处理好的历史数据和输入的预测数据进行曼哈顿距离计算,计算出的曼哈顿距离和历史数据作为一条新数据存储在一个自定义类中。
最后将K近邻算法中k的大小和自定义类组成<k,自定义类>键值对的形式输出给Combine方法。
对应的伪代码如下:
Input: LongWritable key, Text value
Output: LongWritable key,DataBean value, Context context
Begin
1: For i=0 to n( all training dataset) do
2: Distance=ManhattanDistance(testfile,i); //计算预测样本与训练样本的曼哈顿距离
3: databean=new DataBean(Distance); //存储曼哈顿距离到自定义类中
4: Context write(new LongWritable(k), databean); //key为设置好的k值
5: End For
End
(2)Combine方法设计
设计Combine方法是为了减少Map的输出,最大限度利用计算资源。
它相当于本地的Reduce操作,对Map方法输出的键值对进行排队和缩减,处理后的结果作为Reduce方法的输入。
其具体步骤为:首先定义了一个ArrayList链表用来存储满足条件的数据;然后对Map方法的输出进行遍历按照曼哈顿距离从小到大的顺序插入到Array-List中,ArrayList中始终保持不多于k条数据;最后将这些数据传给Reduce方法。
对应的伪代码如下:
Input: LongWritable key,DataBean value
Output: LongWritable key,DataBean value, Context context
Begin
1: For all key and value do
2: ArrayList.add (DataBean);
3: Sort(ArrarList.Distance);
4: Context write(key, ArrayList.get(k)); //取出k个最近邻,写入Context
5: End For
End
(3)Reduce方法设计
若Map方法输出的数据中有若干条数据的曼哈顿距离相同,意味着这几组数据对预测结果有相同的影响。
对于护舷撞击能量预测而言,在影响因素相同的情况下,人们更重视撞击能量大的预测结果。
所以本文在Reduce阶段对数据进行了去冗操作,对于具有相同曼哈顿距离的几组数据,只保留撞击能量最大的一组数据。
Reduce方法主要实现三部分功能,一是对Reduce方法的输入键值对进行遍历和排序;二是对排序中的数据进行去冗操作;三是计算排序后最终结果。
其具体步骤为:首先定义了一个ArrayList链表来存储最终预测结果;其次用循环对Reduce 方法输入的Iterable<values>进行遍历,每次循环按照曼哈顿距离从小到大的顺序向链表中插入数据,同时用If判断该项与前一项的曼哈顿距离是否相同,若相同则保留撞击能量大的一项,循环的最后判断链表的长度是否不大于k,若大于k 则进行减枝操作;然后根据第1节中计算预测结果的方法,对链表中的数据加权求平均值;最后将k值大小和预测结果组成<k,预测结果>键值对的形式输出给HDFS。
对应的伪代码如下:
Input: LongWritable key,DataBean value
Output: Text key, Text value
Begin
1: For all key and value do
2: If DataBean.Distance<Min
3: Min=DataBean.Distance;
4: ArrayList.add (DataBean);
5: End If
6: ArrayList.remove (IsMax(DataBean)); //去冗操作
7: ArrayList.remove (ArrayList.length>k); //保持队列长度小于k
8: End For
9: Context write(key, Result(ArrayList));
End
K的取值对于K近邻算法预测准确性有很大的影响。
经实验发现在k取不同的值的时候,预测误差从2.9到126.8不等。
而且k的取值对历史样本有很大的依赖性,对于不同的历史数据集,预测准确性最佳的k值并不相同。
所以k的大小无法凭经验估计。
本文通过交叉验证的方法对历史样本进行多次验证,将k值从1取至200,每对应一个k值进行一组验证,最终通过验证结果找出当前样本预测准确性最好的k值。
交叉验证的主要步骤如下:
从历史数据集中随机抽取数据集大小5%的样本作为待预测的数据,将剩余95%的样本作为新的历史数据集。
本文以标准差作为误差衡量标准,在Reduce函数最后阶段,求预测结果与待预测数据的标准差。
其余步骤与2.2节算法实现步骤无异。
比较并找出最小标准差,其对应的k值就是这个历史数据集最佳预测k值。
Hadoop集群包含1台主节点和3台重节点[12]。
主节点的配置为Intel(R) Core(TM) i5-4210H 2.90 GHZ CPU,8 GB内存和1 TB硬盘。
重节点1配置为Intel(R) Pentium(R) Dual CPU E2200 2.2.0 GHZ,1 GB内存和150 GB硬盘。
重节点2配置为Intel(R) Core(TM)2 Duo CPU E7200 2.53 GHZ,2 GB内存和150 GB硬盘。
重节点3配置为Intel(R) Core(TM) i5-3230 CPU 2.60 GHZ,8 GB内存和1 TB硬盘。
操作系统均为CentOS 6.5 i386。
JDK版本为jdk-7u79-linux-i586,Hadoop版本为hadoop-1.1.2。
本文对不同k值影响预测结果的情况进行了实验。
实验中采用了一个大小为40万条数据的历史数据集,k值从1取到200,一共进行了3次实验,结果如图3所示。
图3为实验结果的折线统计,统计的横轴表示k的取值,纵轴表示预测结果与真
实结果的标准差。
如图可见,当k值在1至21区间内时,3组实验的标准差波动很大。
当k值在21至29区间内时,3组实验的标准差波动最小且都存在其最低值,其中实验1在k取27时标准差最低,最小值为4.34;实验2在k取23时标准差最低,最小值为1.96;实验3在k取25时标准差最低,最小值为3.98。
在
k取剩余其它值时,3组实验的标准差均不稳定。
由此可见,不同的k值对预测结果会产生不同的影响。
对于这3次实验来说,当k 取值在21至29区间内时,算法具有较高的准确率。
预测的准确度可以由预测的相对误差衡量。
护舷撞击能量预测值和真实值的相对误差公式可以表示为:×100%。
相对误差越大,表示预测的准确度越低,反之预测
准确度越高。
本文对一艘拥有4个护舷的船舶进行模拟实验,预测该船在某一时间的未来2小
时内的撞击能量,每隔半小时预测一次。
实验数据均来自一个40万条数据的历史数据集,经交叉验证选取k等于25为该数据集最佳预测k值。
实验结果见表1,表中数值代表对应护舷撞击能量的相对误差。
观察表中数据可知,第二次实验的预测结果最稳定接近真实结果;第4次实验结果误差最大,但最大误差不超过10%。
数据表明,基于MapReduce的K近邻预测算法有较好的预测准确性。
针对系泊护舷撞击能量预测问题,本文提出了基于MapReduce下的K近邻预测算法。
算法实现了从大量历史数据集中根据护舷撞击能量影响因素预测该情况下的护舷撞击能量。
实验结果表明算法具有较好的预测准确性,且随着历史数据集容量的增加,预测准确性也相应提高。
此外,K近邻预测算法与Hadoop平台结合,体现了Hadoop平台良好的兼容性,同时也提高了K近邻算法的预测效率,实现了算法优化。
对于系泊海量数据的激增,分布式集群环境预测比单机环境预测,更具有良好的准确性和有效性。
【相关文献】
[1]WANG Jiangtao,CHEN Duansheng,WEN Xinzhu.Optimization and implementation of KNN classifier based on the Hadoop platform[J].Journal of Taiyuan University of Technology,2016,47(4):513-517(in Chinese).[王江涛,陈锻生,温新竹.基于Hadoop平台的KNN 分类器的优化和实现[J].太原理工大学学报,2016,47(4):513-517.]
[2]XIONG Yajun,LIAO Xiaonong,LI Ziming,et al.Application of KNN data mining algorithm to haze grade forecasting in Beijing[J].Meteorological Monthly,2015,41(1):98-104(in Chinese).[熊亚军,廖晓农,李梓铭,等.KNN数据挖掘算法在北京地区霾等级预报中的应用[J].气象,2015,41(1):98-104.]
[3]YU Bin,WU Shanhua,WANG Minghua,et al.K-nearest neighbor model of short-term traffic flow forecast[J].Journal of Traffic and Transportation Engineering,2012,12(2):105-111(in Chinese).[于滨,邬珊华,王明华,等.K近邻短时交通流预测模型[J].交通运输工程学
报,2012,12(2):105-111.]
[4]WEN Si.The research of K-nearest neighbor classification algorithm based on Hadoop platform[D].Guangzhou:South China University of Technology,2011(in Chinese).[文思.基于Hadoop的K近邻分类算法的研究[D].广州:华南理工大学,2011.]
[5]LIU Bijin,ZHANG Yifei,SUN Zhaochen,et al.On impact energy of mooring ships berthing at open terminal under wave action[J].Port & Watering Engineering,2011(7):71-75(in Chinese).[刘必劲,张亦飞,孙昭晨,等.波浪作用下大型开敞式码头系泊船舶撞击能量研究[J].水运工程,2011(7):71-75.]
[6]WU Suhui,CHENG Ying,ZHENG Yanning,et al.Survey on K-means algorithm[J].New Technology of Library and Information Service,2011(5):28-35(in Chinese).[吴夙慧,成颖,郑彦宁,等.K-means算法研究综述[J].现代图书情报技术,2011(5):28-35.]
[7]CHEN Leilei.Text clustering study with K-Means algorithm of different distance measures[J].Software,2015,36(1):56-61(in Chinese).[陈磊磊.不同距离测度的K-Means文本聚类研究[J].软件,2015,36(1):56-61.]
[8]Zhang S.Nearest neighbor selection for iteratively k NN imputation[J].Journal of Systems & Software,2012,85(11):2541-2552.
[9]Bradley Efron,Gail Gong.A leisurely look at the bootstrap,the jackknife,and cross-validation[J].American Statistician,2012,37(1):36-48.
[10]Overpeck JT,Meehl GA,Bony S,et al.Climate data challenges in the 21st
century[J].Science,2011,331(6018):700.
[11]Srirama SN,Jakovits P,Vainikko E.Adapting scientific computing problems to clouds using MapReduce[J].Future Generation Computer Systems,2012,28(1):184-192.
[12]He Q,Yan J,Jin H,et al.Quality-aware service selection for service-based systems based on iterative multi-attribute combinatorial auction[J].IEEE Transactions on Software Engineering,2014,40(2):192-215.。