心血来潮,同时想用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的一些心得体会的更多相关文章

  1. Computer Vision_33_SIFT: A novel point-matching algorithm based on fast sample consensus for image registration——2015

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  2. 【MybatisPlus】数据库的datetime类型字段为空的时候,报错空指针?

    一.发现经历 事情是这样的,我今天本来要演示系统,就去前端同学的页面上点一点.不小心点到了其他同事编写的服务,然后界面就报错了.这给我吓得,这还能演示吗这.然后,我就去服务器查看了一下日志,发现了如下 ...

  3. 重写轮子之 ID3

    这是半成品, 已完成了 fit() 部分, 形成了包含一棵完整树的 node 对象. 后续工作是需解析该 node对象, 完成 predict() 工作. # !/usr/bin/python # - ...

  4. 机器学习-决策树之ID3算法

    概述 决策树(Decision Tree)是一种非参数的有监督学习方法,它是一种树形结构,所以叫决策树.它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回 ...

  5. 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 ...

  6. 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 ...

  7. 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 ...

  8. A Novel Multi-label Classification Based on PCA and ML-KNN

     ICIC Express Letters                  ICIC International ⓒ2010 ISSN 1881-803X Volume4, Number5, O ...

  9. Simultaneous Localization and Mapping Technology Based on Project Tango

    Abstract: Aiming at the problem of system error and noise in simultaneous localization and mapping ( ...

随机推荐

  1. ruby简单的基本 3

    类 Ruby一切都是对象,它包含了一个恒定.例如,可以使用.class物业查看对象的类型,你可以看一下1.class.你会发现常1类型是Fixnum,1但它是Fixnum的一个例子. Ruby本类cl ...

  2. LeetCode——Add Binary

    Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...

  3. [ACM] HUST 1017 Exact cover (Dancing Links,DLX模板题)

    DESCRIPTION There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is ...

  4. CSS 之 光进入光

    一个.概念 css,层叠样式表(英语:Cascading Style Sheets.简写CSS).又称串样式列表.层次结构式样式表文件,一 种用来为结构化文档(如HTML文档或XML应用)加入样式(字 ...

  5. 允许Ubuntu14.04&quot;保存&quot;屏幕亮度值

    Ubuntu / Debian 该系统有一个共同的问题,也就是说,每个引导.系统会打开你的屏幕亮度调至最高值. 我很奇怪,为什么14.04这一问题的版本号依然不动. 但是,我们可以做一个脚本Ubunt ...

  6. CreateEvent、SetEvent、ResetEvent和WaitForSingleObject

    事件对象就像一个开关:它仅仅有两种状态---开和关.当一个事件处于"开"状态.我们称其为"有信号".否则称为"无信号". 能够在一个线程的运 ...

  7. RH253读书笔记(4)-Lab 4 The Domain Name System

    Lab 4 The Domain Name System Goal: To install and configure a DNS server System Setup: Throughout th ...

  8. Android Activity之间通信

    package com.example.myapp; import android.app.Activity; import android.content.DialogInterface; impo ...

  9. 【Unity 3D】学习笔记三十五:游戏实例——摄像机切换镜头

    摄像机切换镜头 在游戏中常常会切换摄像机来观察某一个游戏对象,能够说.在3D游戏开发中,摄像头的切换是不可或缺的. 这次我们学习总结下摄像机怎么切换镜头. 代码: private var Camera ...

  10. iOS一个开发系列中 - UIButton 使用摘要

    // 初始化button并设置类型 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 可以定义的UIButto ...