一种基于MapReduce的K近邻数据预测方法

文档序号:8259202阅读:366来源:国知局
一种基于MapReduce的K近邻数据预测方法【
技术领域
】[0001]本发明属于数据挖掘
技术领域
,涉及一种基于MapReduce的K近邻数据预测方法。【
背景技术
】[0002]线性回归预测作为数据挖掘中的统计、预测方法之一,在科研、商业数据分析中占据着重要的地位。传统的线性回归预测属于参数学习算法,其参数是固定不变的,而在实际应运中,数据的生成机制与线性回归模型有很大偏差,这样得出的分析数据往往与实际有很大出入,甚至是错误的数据。局部加权线性回归预测方法是一种非参数回归技术,它允许线性回归模型中的参数随着自变量的不同取值而变化。在大数据时代,传统的线性回归预测方法和局部加权线性回归预测方法,繁琐的计算步骤和效率极低的单机串行计算,已经无法继续胜任对数据进行挖掘和处理,对大规模数据的挖掘和处理能力存在着很大的局限性。[0003]MapReduce编程模型是Google公司的核心计算模型,被应用于大规模集群上的复杂的并行计算。Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,该平台开源实现了MapReduce编程模型。K近邻(K-NearestNeighbor)是一种简洁而有效的非参数学习方法。K近邻方法对每一个输入都会去训练数据集中去搜索与其最相似的K个数据对象,在K近邻学习过程中,当目标函数值为连续值时,对待预测数据搜索出的K个近邻点,分别给定一个距离加权,是一种简单可靠的变参回归预测方法。当训练数据达到海量规模时,K近邻的搜索效率将很难达到实际需求,而且海量的数据对于目前的计算机处理速度和内存空间也是一种挑战。【
发明内容】[0004]本发明的目的是提供一种基于MapReduce的K近邻数据预测方法,解决了传统预测方法参数固定,数据处理精准度差以及对大规模数据的回归预测处理能力存在局限性的问题。[0005]本发明所采用的技术方案是,一种基于MapReduce的K近邻数据预测方法,包括如下步骤:[0006]步骤1、确定训练数据和待测试数据,并将训练数据上传至Hadoop分布式集群,分散至各集群节点中存储;[0007]步骤2、在Hadoop分布式集群中各个节点的Mapper端,设计Map函数:根据欧式距离计算公式,计算出待预测数据与本节点部分训练数据样本之间的距离;[0008]步骤3、在Mapper端,将步骤2所得距离值发送至集群节点的Combiner端,设计Combine函数:进行本地排序,选出局部距离最小的K个最近邻点,得到局部K-最近邻子集;[0009]步骤4、在Combiner端,将步骤3所得的所有局部K-最近邻子集,发送至Hadoop分布式集群各Reducer端,设计Reduce函数:对所有局部K-最近邻子集进行重新排序,得到全局K-最近邻子集;利用距离加权方法,根据权重函数计算全局K-最近邻子集中训练数据对待预测数值影响的权重大小;利用回归函数,将所得权重值定义为回归系数,计算得出待预测数据的预测值;[0010]步骤5、将步骤4处理后的数据存储在HDFS文件系统中,可用Hadoop相关查看工具查看或下载至本地。[0011]本发明的特征还在于,[0012]步骤2中,设计Map函数的过程为:函数输入定义为〈LongWritablekey,Texttext〉,key为训练数据行号,text为记录数据;输出函数定义为〈Contextcontext〉,定义类Sample(),存储数据间距离和此条训练数据目标函数实际值;遍历所有训练数据和待预测数据,计算其距离,并将距离值和训练数据的目标函数值存入Sample();输出context,write(key',sample()),key'为待预测数据行号。[0013]步骤3中,设计Combine函数具体过程为:将函数输入定义为〈LongWritablekey,Samplesample〉,输出定义为〈Contextcontext〉;把所有的sample存入一个链表结构里,arrayList.add(sample);对arrayList进行局部排序,执行sort(arrayList);从排好顺序的arrayList中仅取出前K个sample,并输出context,write(key,arrayList.get())。[0014]步骤4中,设计Reduce函数过程为:函数输入定义为〈LongWritablekey,Iterator〈Sample>values>,函数输出定义为〈Contextcontext〉;取出所有的K最近邻点相关数据存入一个arrayList,进行全局排序,并取出全局的K个最近邻点相关数据存入sortedArrayList,sortedArrayList.add(arrayList.get())〇[0015]步骤4中,权重函数为:[0016]【主权项】1.一种基于MapReduce的K近邻数据预测方法,其特征在于,包括如下步骤:步骤1、确定训练数据和待测试数据,并将训练数据上传至Hadoop分布式集群,分散至各集群节点中存储;步骤2、在Hadoop分布式集群中各个节点的Mapper端,设计Map函数,根据欧式距离计算公式,计算出待预测数据与本节点部分训练数据样本之间的距离;步骤3、在Mapper端,将步骤2所得距离值发送至集群节点的Combiner端,设计Combine函数,并进行本地排序,选出局部距离最小的K个最近邻点,得到局部K-最近邻子集;步骤4、在Combiner端,将步骤3所得的所有局部K-最近邻子集,发送至Hadoop分布式集群各Reducer端,设计Reduce函数:对所有局部K-最近邻子集进行重新排序,得到全局K-最近邻子集;利用距离加权方法,根据权重函数计算全局K-最近邻子集中训练数据对待预测数值影响的权重大小;利用回归函数,将所得权重值定义为回归系数,计算得出待预测数据的预测值;步骤5、将步骤4处理后的数据存储在HDFS文件系统中,用Hadoop相关查看工具查看或下载至本地。2.根据权利要求1所述的一种基于MapReduce的k近邻数据预测方法,其特征在于,步骤2中,所述设计Map函数的过程为:函数输入定义为〈LongWritablekey,Texttext〉,key为训练数据行号,text为记录数据;输出函数定义为〈Contextcontext〉,定义类Sample(),存储数据间距离和此条训练数据目标函数实际值;遍历所有训练数据和待预测数据,计算其距离,并将距离值和训练数据的目标函数值存入Sample();输出context,write(key',sample()),key'为待预测数据行号。3.根据权利要求1所述的一种基于MapReduce的k近邻数据预测方法,其特征在于,步骤3中,所述设计Combine函数的具体过程为:将函数输入定义为〈LongWritablekey,Samplesample〉,输出定义为〈Contextcontext〉;把所有的sample存入一个链表结构里,arrayList.add(sample);对arrayList进行排序,执行sort(arrayList);从排好顺序的arrayList中仅取出前K个sample,并输出context,write(key,arrayList.get())。4.根据权利要求1所述的一种基于MapReduce的k近邻数据预测方法,其特征在于,步骤4中,所述设计Reduce函数过程为:函数输入定义为〈LongWritablekey,Iterator〈Sample>values>,函数输出定义为〈Contextcontext〉;取出所有的K最近邻点相关数据存入一个arrayList,进行全局排序,并取出全局的K个最近邻点相关数据存sortedArrayList,sortedArrayList.add(arrayList.get())〇5.根据权利要求1所述的一种基于MapReduce的k近邻数据预测方法,其特征在于,步骤4中,所述权重函数为:其中,W(x,Pi)为权重值,d(x,Pi)为待预测点x训练数据中第i个邻居?1的距离,1<i<n〇6.根据权利要求1所述的一种基于MapReduce的k近邻数据预测方法,其特征在于,步骤4中,所述回归函数为:其中,y'为测试样本的回归预测值,h为回归系数,yi为训练样本pi的目标值。【专利摘要】本发明公开的一种基于MapReduce的K近邻数据预测方法,包括如下步骤:确定训练数据和待测试数据,将训练数据上传至Hadoop集群,分散存储;设计Map函数计算待预测数据与本节点的部分训练数据之间的距离;设计Combine函数,对Map函数的输出进行局部排序;Reducer端设计Reduce函数,进行全局排序,得到全局的K个最近邻数据对象及其距离,利用距离加权方法,计算K个权重大小,将计算出的权重值定义为回归系数,计算出待预测数据的预测值。本发明采用变参机制替代传统线性回归预测方法中的固参模式,提高了数据预测的准确精度;利用MapReduce编程模型,在Hadoop分布式计算平台上实现并行计算,大幅度提高了大规模数据集的计算效率。【IPC分类】G06F19-00【公开号】CN104573331【申请号】CN201410803550【发明人】薛涛,孙兵率【申请人】西安工程大学【公开日】2015年4月29日【申请日】2014年12月19日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1