关于重写ID3 Algorithm Based On MapReduceV1/C++/Streaming的一些心得体会
心血来潮,同时想用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 先算每种因素的出现概率,再推算因素所在FILED的出现概率,再推送嫡,再推算GAIN。
嵌套过程如下,注意输入输出,一般来说,把下个子节点和概率,带到下一次嵌套FUNCTION中。

最后输出屌丝版的结果:

高富帅的结果:

一些心得体会:
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
关于重写ID3 Algorithm Based On MapReduceV1/C++/Streaming的一些心得体会的更多相关文章
- Computer Vision_33_SIFT: A novel point-matching algorithm based on fast sample consensus for image registration——2015
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- 【MybatisPlus】数据库的datetime类型字段为空的时候,报错空指针?
一.发现经历 事情是这样的,我今天本来要演示系统,就去前端同学的页面上点一点.不小心点到了其他同事编写的服务,然后界面就报错了.这给我吓得,这还能演示吗这.然后,我就去服务器查看了一下日志,发现了如下 ...
- 重写轮子之 ID3
这是半成品, 已完成了 fit() 部分, 形成了包含一棵完整树的 node 对象. 后续工作是需解析该 node对象, 完成 predict() 工作. # !/usr/bin/python # - ...
- 机器学习-决策树之ID3算法
概述 决策树(Decision Tree)是一种非参数的有监督学习方法,它是一种树形结构,所以叫决策树.它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回 ...
- Cognition math based on Factor Space (2016.05)
Cognition math based on Factor Space Wang P Z1, Ouyang H2, Zhong Y X3, He H C4 1Intelligence Enginee ...
- What does it mean for an algorithm to be fair
What does it mean for an algorithm to be fair In 2014 the White House commissioned a 90-day study th ...
- Home | eMine: Web Page Transcoding Based on Eye Tracking Project Page
Home | eMine: Web Page Transcoding Based on Eye Tracking Project Page The World Wide Web (web) has m ...
- A Novel Multi-label Classification Based on PCA and ML-KNN
ICIC Express Letters ICIC International ⓒ2010 ISSN 1881-803X Volume4, Number5, O ...
- Simultaneous Localization and Mapping Technology Based on Project Tango
Abstract: Aiming at the problem of system error and noise in simultaneous localization and mapping ( ...
随机推荐
- C指针决心 ------ 指针的概念和元素
本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 指针在C语言中的地位,不用多说. 指针的概念 指针是一个特殊的变量,它里面存储 ...
- boostrap-非常好用但是容易让人忽略的地方------input-group-btn
1.正常的使用 <div class="form-group"> <div class="input-group"> <input ...
- 吐槽一下Activiti用户手册和一本书
业余没事的时候,读点Java轮廓,无意中发现Activiti.我们打算跑了几个例子来看看它是如何. 我们一直从事低层次.我们在上面的照顾偶尔有精确地的程度不是什么. 这个过程是如此悲惨开始.第一Act ...
- iOS开发无第三方控件的援助达到的效果侧边栏
最近的研究iOS程序侧边栏.渐渐的发现iOS该方案还开始采取风侧边栏格该,QQ,今日头条,Path(Path运营商最早的侧边栏app该,效果说成是Path效果),所以就研究了下. 然后发现Git Hu ...
- phpcmsv9更改fckeditor编者ueditor编辑
于phpcmsv9文件夹中找到phpcms/libs/classes/form.class.php档 找到几行代码 <span style="font-size:18px;" ...
- [Python]新手写爬虫全过程(转)
今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在tx ...
- spring mvc中实现csrf安全防御简记
1.csrf是什么 csrf全称是Cross-site request forgery,http://en.wikipedia.org/wiki/Csrf 危害:使受害用户在不经意间执行了不是用户意愿 ...
- Android 获取屏幕大小和密度
Android 获取屏幕大小和密度 DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay ...
- Maven聚合和继承的详细解释
说到聚合与继承我们都非常熟悉,maven相同也具备这种设计原则.以下我们来看一下Maven的pom怎样进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高. ...
- Oracle压缩总结2—
估计表压缩效应
使用压缩前,我们可以估算压缩能有多大效果. 11gr2我已经能够使用dbms_comp_advisor,具体代码见附件.只需要运行两个文件dbmscomp.sql和prvtcomp.plb.然后使用D ...