# Parallelization_Extreme_learning_machine **Repository Path**: xiaobin-qinqin/Parallelization_Extreme_learning_machine ## Basic Information - **Project Name**: Parallelization_Extreme_learning_machine - **Description**: 并行ELM算法实现 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-19 - **Last Updated**: 2023-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Parallelization_Extreme_learning_machine 使用Hadoop的MapReduce框架并行实现极限学习机(ELM) #### 介绍 本项目是使用MapReduce框架并行实现极限学习机,思想主要是参考了Qing He教授的《Parallel extreme learning machine for regression based on MapReduce》论文。 但存在很大的不同,Qing He教授实现的是回归任务,本项目是实现了分类的任务。 #### 软件架构 软件架构说明 本项目现行的版本是在windows下的hadoop实现,windows下安装hadoop非常方便,具体可自行百度。外部的包使用了google的矩阵运算包mtj-0.9.9.jar,在目录src/main/java/com/mapreduce/lib/mtj-0.9.9.jar下。其它的包在pom.xml文件下,可以maven安装。 #### MapReduce简要介绍 一般来说,一个MapReduce的计算作业可以初步分为两步:Mapper和Reducer。细分之下,下图所示,MapReduce的总体流程如下: ![mapreduce框架](MapReduce.png) (1)数据分片:在程序开始执行时,MapReduce会将输入的数据分为N个数据片段,每个数据片段的大小一般为128MB,用户可以根据自身数据的需求自由设定数据片段的大小,最后用户程序在集群中创建大量的程序副本。值得一提的是,一般认为数据片段越多,并行的计算速度越快。但是这是基于超大数据集的,当数据不够大时,数据片段多不仅不会加快计算速度,某些情况下有可能还会降低计算速度,这是由于数据的分割以及各个主机之间的通信需要一定的时间。 (2)任务分配:程序副本中有一个特殊的 master 程序副本,其它的都是 worker 程序,由 master 分配任务。有 M 个 Map 任务和 R 个 Reduce 任务将被分配,master 将分配空闲的 worker 来执行每一个 Map 任务或 Reduce 任务。 (3)执行Map任务:对于每一个数据片段,都会被分配一个Map程序对其进行处理.Map程序读取对应的数据片段,从输入的数据片段中解析出键值对,然后把键值对交由由用户自定义的Map函数处理,生成中间的键值对值并输出到内存中。键值对是MapReduce程序中的基本数据结构,此框架下处理的数据都是key和value键值对。 (4)Map 输出中间数据回传:缓存中的键值对通过分区函数分成 R 个区域,之后周期性的写入到本地磁盘上。缓存的键值对在本地磁盘上的存储位置将被回传给主机,由主机负责把这些存储位置再传送给 Reduce worker。 (5)Reduce读取中间数据:当Reduce worker程序被通知到由主程序发来的数据存储位置信息后,使用 RPC 从 Map worker 所在主机的磁盘上读取这些缓存数据。当 Reduce worker 读取了所有的中间数据后,通过对 key 进行排序后使得具有相同 key 值的数据聚合在一起(图\ref{fig_mapreduce}中的shuffle过程)。由于许多不同的 key 值会映射到相同的 Reduce任务上,因此必须进行排序。如果中间数据太大无法在内存中完成排序,那么就要在外部进行排序。 (6)执行Reduce任务:Reduce worker 程序遍历排序后的中间数据,对于每一个唯一的中间 key 值,Reduce worker 程序将这个key值和它相关的中间value值的集合传递给用户自定义的Reduce 函数。Reduce函数的输出被追加到所属分区的输出文件。\par MapReduce运行时系统独立执行每个映射函数,也就是说,所有Map函数都可以完全并行化,Reduce函数也是如此。MapReduce具有高度透明性,其并行性在实际编程中很容易实现。 #### ELM简要介绍 ![输入图片说明](elm.png) #### 使用说明 1. 按照上面说明自行安装Hadoop和各个依赖包 2. 主函数sumDriver类,运行这个即可(注意更改代码中的文件路径) 3. 结果: ![在运行中的状态](image.png) ![训练的结果](result.png)