会员中心 |  会员注册  |  兼职信息发布    浏览手机版!    精选9.9元!    人工翻译    英语IT服务 贫困儿童资助 | 留言板 | 设为首页 | 加入收藏  繁體中文
当前位置:首页 > 机翻技术 > 识别技术 > 正文

示例:分布式SVM的Pegasos算法

发布时间: 2023-04-06 09:22:13   作者:etogether.net   来源: 网络   浏览次数:


在此不对该代码做过多分析,它只为Pegasos算法的MapReduce版本做一个铺垫。下面将在mrjob中建立并运行一个MapReduce版本的Pegasos算法。


2. 训练算法:用mrjob实现MapReduce版本的SVM

在此将用MapReduce来实现程序清单1的Pegasos算法,之后再用mrjob框架运行该算法。首先要明白如何将该算法划分成map阶段和reduce阶段,确认哪些可以并行,哪些不能并行。


对程序清单15-4的代码运行情况稍作观察将会发现,大量的时间花费在内积计算上。另外,内积运算可以并行,但创建新的权重变量w是不能并行的。这就是将算法改写为MapReduce作业的一个切入点。在编写mapper和reducer的代码之前,先完成一部分外围代码。打开文本编辑器,

创建一个新文件mrSVM.py,然后在该文件中添加下面程序清单的代码。


程序清单2 mrjob中分布式Pegasos算法的外围代码


程序清单2.png

程序清单2.1.png


程序清单2 的代码进行了一些设定,从而保证了map和reduce阶段的正确执行。在程序开头,Mrjob、NumPy和Pickle模块分别通过一条include语句导入。之后创建了一个mrjob类MRsvm,其中__init__()方法初始化了一些在map和reduce阶段用到的变量。Python的模块Pickle在加载不同版本的Python文件时会出现问题。为此,我将Python2.6和2.7两个版本对应的数据文件各自存为svmDat26和svmDat27。


对应于命令行输入的参数,configure_options()方法建立了一些变量,包括迭代次数(T)、待处理列表的大小(k)。这些参数都是可选的,如果未指定,它们将采用默认值。


最后,steps()方法告诉mrjob应该做什么,以什么顺序来做。它创建了一个Python的列表,包含map、map_fin和reduce这几个步骤,然后将该列表乘以迭代次数,即在每次迭代中重复调用这个列表。为了保证作业里的任务链能正确执行,mapper需要能够正确读取reducer输出的数据。单个MapReduce作业中无须考虑这个因素,这里需要特别注意输入和输出格式的对应。


我们对输入和输出格式进行如下规定:


Mapper

     Inputs:

    Outputs: nothing


Mapper_final

     Inputs: nothing

    Outputs:<1, valuelist="">


Reducer

     Inputs:

    Outputs:


传入的值是列表数组,valueList的第一个元素是一个字符串,用于表示列表的后面存放的是什么类型的数据,例如{'x',23)和['w',[1,5,6]]。每个mapper_final都将输出同样的key, 这是为了保证所有的key/value对都输出给同一个reducer。


定义好了输入和输出之后,下面开始写mapper和reducer方法,打开mrSVM.py文件并在MRsvm类中添加下面的代码。



微信公众号

[上一页][1] [2] [3] [下一页] 【欢迎大家踊跃评论】
  • 上一篇:语音识别中的问题
  • 下一篇:基于协同过滤的推荐引擎


  • 《译聚网》倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请30天内提供版权疑问、身份证明、版权证明、联系方式等发邮件至info@qiqee.net,我们将及时沟通与处理。


我来说两句
评分: 1分 2分 3分 4分 5分
评论内容:
验证码:
【网友评论仅供其表达个人看法,并不表明本站同意其观点或证实其描述。】
评论列表
已有 0 条评论(查看更多评论)