首页 技术 正文
技术 2022年11月9日
0 收藏 659 点赞 4,140 浏览 812 个字

心血来潮,同时想用C++连连手。面对如火如荼的MP,一阵念头闪过,如果把一些ML领域的玩意整合到MP里面是不是很有意思

确实很有意思,可惜mahout来高深,我也看不懂。干脆自动动手丰衣足食,加上自己对JAVA一窍不通,于是写了streming C++版的ID3,数据源是来大神orisun的原始数据。

整个过程都是下班后一边带孩子一边撰写,总共历时2周多,写了两个版本:

1,shell+streming(屌丝版,MP运行速度在3分钟,单机OS运行速度541毫秒)

2,streaming一次成型(高富帅版,MP运行速度23秒,单机OS运行速度42毫秒)

先贴一些ID3的数据流向,

关于重写ID3 Algorithm Based On MapReduceV1/C++/Streaming的一些心得体会

ID3 先算每种因素的出现概率,再推算因素所在FILED的出现概率,再推送嫡,再推算GAIN。

嵌套过程如下,注意输入输出,一般来说,把下个子节点和概率,带到下一次嵌套FUNCTION中。

关于重写ID3 Algorithm Based On MapReduceV1/C++/Streaming的一些心得体会

最后输出屌丝版的结果:

关于重写ID3 Algorithm Based On MapReduceV1/C++/Streaming的一些心得体会

高富帅的结果:

关于重写ID3 Algorithm Based On MapReduceV1/C++/Streaming的一些心得体会

一些心得体会:

1,总体代码行数偏于庞大,主要在字段过滤和预先处理方面花费了不少精力,为的是预防开发人员无法全量distinct 所有因素的枚举。

2,mapreduce在嵌套调用方面能力较弱,加上自己本身不会java,mp的一些基础库如jobchain和jobconf无法发挥100%功效。只能用外部shell来实施文本过滤。

3,高富帅版本主要的思想是想让mapper承担更多的计算,避免嵌套重复过滤样本生成树,所有做了所有可见组合的计算,共144项,将结果直传给了Reducer。

4,对于Reduce数据结构的构建,试了多种形式,最终决定还是用结构体+MAP容器嵌套+嵌套,形成第一张图的表格。

5,对于字符串处理和内存处理细节有所欠缺。从char *,string傻傻理不清楚。

6,坊间谣传strsep bug较少,对此无太多评论。

源码如下,各位看官手下留情。^_^

https://github.com/zacard-orc/zacard

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898