Mahout决策森林算法

一、决策树

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之 间的一种映射关系。Entropy = 系统的凌乱程度,使用算法ID3,C4.5和C5.0生成树算法使用熵,这一度量是基于信息学理论中熵的概念。

决策树是数据挖掘分类算法的一个重要方法。在各种分类算法中,决策树是最直观的一种。下面是对于“Play golf dataset”数据集生成的决策树。

二、Bagging

两个著名的增强学习技术为Bagging和Boosting,它们都是构造多个分类器,并且最终的分类是由某种分类器的投票机制决定。Bagging和Boosting的区别在于,前者能够并行,而后者不行。对于不稳定的分类器,增强学习的方法可以显著提高分类效果;而对于稳定的分类器,用增强学习,有可能会降低分类的效果。稳定的分类器如:朴素贝叶斯,KNN,SVM等。不稳定的分类器如决策树,基于规则的分类。

给定一个有个样例的训练集合和一个基本的分类算法。Bagging的实现步骤如下。

训练:

生成K个样本集合,每个样本集合都有放回的从D中随机抽取得到。这样的一个样本集合成为原始训练样本D的一个自展复制。每个样本平均含有原始样本的63.2%,其中一个样本有可能重复出现。

对每一个样本集都构造一个分类器,将得到k个分类器。

测试:

对测试样例进行分类,由k个分类投票(由权重),占多数的类别将被赋予该测试样例。

三、决策森林

机器学习中,随机森林是一个包含多个决策树分类器
并且其输出的类别是由个别树输出的类别的众数而定。Leo
Breiman
Adele Cutler发展出推论出随机森林的算法。 而 "Random Forests" 是他们的商标
这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合 Breimans 的 "Bootstrapaggregating"
想法和 Ho 的"randomsubspace method" 以建造决策树的集合。

根据下列算法而建造每棵树:

(1)用 N 来表示训练用例(样本)的个数,M表示特征数目。

(2)输入特征数目 m ,用于确定决策树上一个节点的决策结果;其中m应远小于M。

(3)从N个训练用例(样本)中以有放回抽样的方式,取样N次,形成一个训练集(即bootstrap取样),并用未抽到的用例(样本)作预测,评估其误差。

(4)对于每一个节点,随机选择m个特征,决策树上每个节点的决定都是基于这些特征确定的。根据这 m 个特征,计算其最佳的分裂方式。

(5)每棵树都会完整成长而不会剪枝(Pruning)(这有可能在建完一棵正常树状分类器后会被采用)。

所以“决策树+Bagging=决策森林”。

决策树算法的优点:

1.        在数据集上表现良好。

2.        在当前的很多数据集上,相对其他算法有着很大的优势。

3.        它能够处理很高维度(feature很多)的数据,并且不用做特征选择。

4.        在训练完后,它能够给出哪些feature比较重要。

5.        在创建随机森林的时候,对generlization error使用的是无偏估计。

6.        训练速度快。

7.        在训练过程中,能够检测到feature间的互相影响。

8.        容易做成并行化方法。

9.        实现比较简单。

四、MapReduce实现决策森林

训练:

(1)用随机抽样的方法抽取多组固定个数的特征属性集S={F1,F2,...Fn}.

(2)输入数据集,Hadoop自动划分到各个节点;将特征集用DistributeCache发送到各个执行Task的节点。

(3)每个节点Map中根据特征属性集,以及数据信息,分别统计不同决策树节点分支的信息,构建决策树。该过程构造的决策树不需要做剪枝。

分类:

将构建好的K个决策树,用DistributeCache发送到各个节点。

在Map中通过K个决策树表决,得到分类信息。

五、API说明

示例数据:(Iris数据)

萼片长度,萼片宽度,花瓣长度,花瓣宽度,类型

5.1, 3.5, 1.4, 0.2, Iris-setosa

4.9, 3.0, 1.4, 0.2, Iris-setosa

4.7, 3.2, 1.3, 0.2, Iris-setosa

4.6, 3.1, 1.5, 0.2, Iris-setosa

5.0, 3.6, 1.4, 0.2, Iris-setosa

5.4, 3.9, 1.7, 0.4, Iris-setosa

4.6, 3.4, 1.4, 0.3, Iris-setosa

5.0, 3.4, 1.5, 0.2, Iris-setosa

4.4, 2.9, 1.4, 0.2, Iris-setosa

4.9, 3.1, 1.5, 0.1, Iris-setosa

5.4, 3.7, 1.5, 0.2, Iris-setosa

4.8, 3.4, 1.6, 0.2, Iris-setosa

4.8, 3.0, 1.4, 0.1, Iris-setosa

4.3, 3.0, 1.1, 0.1, Iris-setosa

5.8, 4.0, 1.2, 0.2, Iris-setosa

5.7, 4.4, 1.5, 0.4, Iris-setosa

5.4, 3.9, 1.3, 0.4, Iris-setosa

5.1, 3.5, 1.4, 0.3, Iris-setosa

5.7, 3.8, 1.7, 0.3, Iris-setosa

5.1, 3.8, 1.5, 0.3, Iris-setosa

5.4, 3.4, 1.7, 0.2, Iris-setosa

5.1, 3.7, 1.5, 0.4, Iris-setosa

4.6, 3.6, 1.0, 0.2, Iris-setosa

5.1, 3.3, 1.7, 0.5, Iris-setosa

4.8, 3.4, 1.9, 0.2, Iris-setosa

5.0, 3.0, 1.6, 0.2, Iris-setosa

5.0, 3.4, 1.6, 0.4, Iris-setosa

5.2, 3.5, 1.5, 0.2, Iris-setosa

5.2, 3.4, 1.4, 0.2, Iris-setosa

4.7, 3.2, 1.6, 0.2, Iris-setosa

4.8, 3.1, 1.6, 0.2, Iris-setosa

5.4, 3.4, 1.5, 0.4, Iris-setosa

5.2, 4.1, 1.5, 0.1, Iris-setosa

5.5, 4.2, 1.4, 0.2, Iris-setosa

4.9, 3.1, 1.5, 0.1, Iris-setosa

5.0, 3.2, 1.2, 0.2, Iris-setosa

5.5, 3.5, 1.3, 0.2, Iris-setosa

4.9, 3.1, 1.5, 0.1, Iris-setosa

4.4, 3.0, 1.3, 0.2, Iris-setosa

5.1, 3.4, 1.5, 0.2, Iris-setosa

5.0, 3.5, 1.3, 0.3, Iris-setosa

4.5, 2.3, 1.3, 0.3, Iris-setosa

4.4, 3.2, 1.3, 0.2, Iris-setosa

5.0, 3.5, 1.6, 0.6, Iris-setosa

5.1, 3.8, 1.9, 0.4, Iris-setosa

4.8, 3.0, 1.4, 0.3, Iris-setosa

5.1, 3.8, 1.6, 0.2, Iris-setosa

4.6, 3.2, 1.4, 0.2, Iris-setosa

5.3, 3.7, 1.5, 0.2, Iris-setosa

5.0, 3.3, 1.4, 0.2, Iris-setosa

7.0, 3.2, 4.7, 1.4, Iris-versicolor

6.4, 3.2, 4.5, 1.5, Iris-versicolor

6.9, 3.1, 4.9, 1.5, Iris-versicolor

5.5, 2.3, 4.0, 1.3, Iris-versicolor

6.5, 2.8, 4.6, 1.5, Iris-versicolor

5.7, 2.8, 4.5, 1.3, Iris-versicolor

6.3, 3.3, 4.7, 1.6, Iris-versicolor

4.9, 2.4, 3.3, 1.0, Iris-versicolor

6.6, 2.9, 4.6, 1.3, Iris-versicolor

5.2, 2.7, 3.9, 1.4, Iris-versicolor

5.0, 2.0, 3.5, 1.0, Iris-versicolor

5.9, 3.0, 4.2, 1.5, Iris-versicolor

6.0, 2.2, 4.0, 1.0, Iris-versicolor

6.1, 2.9, 4.7, 1.4, Iris-versicolor

5.6, 2.9, 3.6, 1.3, Iris-versicolor

6.7, 3.1, 4.4, 1.4, Iris-versicolor

5.6, 3.0, 4.5, 1.5, Iris-versicolor

5.8, 2.7, 4.1, 1.0, Iris-versicolor

6.2, 2.2, 4.5, 1.5, Iris-versicolor

5.6, 2.5, 3.9, 1.1, Iris-versicolor

5.9, 3.2, 4.8, 1.8, Iris-versicolor

6.1, 2.8, 4.0, 1.3, Iris-versicolor

6.3, 2.5, 4.9, 1.5, Iris-versicolor

6.1, 2.8, 4.7, 1.2, Iris-versicolor

6.4, 2.9, 4.3, 1.3, Iris-versicolor

6.6, 3.0, 4.4, 1.4, Iris-versicolor

6.8, 2.8, 4.8, 1.4, Iris-versicolor

6.7, 3.0, 5.0, 1.7, Iris-versicolor

6.0, 2.9, 4.5, 1.5, Iris-versicolor

5.7, 2.6, 3.5, 1.0, Iris-versicolor

5.5, 2.4, 3.8, 1.1, Iris-versicolor

5.5, 2.4, 3.7, 1.0, Iris-versicolor

5.8, 2.7, 3.9, 1.2, Iris-versicolor

6.0, 2.7, 5.1, 1.6, Iris-versicolor

5.4, 3.0, 4.5, 1.5, Iris-versicolor

6.0, 3.4, 4.5, 1.6, Iris-versicolor

6.7, 3.1, 4.7, 1.5, Iris-versicolor

6.3, 2.3, 4.4, 1.3, Iris-versicolor

5.6, 3.0, 4.1, 1.3, Iris-versicolor

5.5, 2.5, 4.0, 1.3, Iris-versicolor

5.5, 2.6, 4.4, 1.2, Iris-versicolor

6.1, 3.0, 4.6, 1.4, Iris-versicolor

5.8, 2.6, 4.0, 1.2, Iris-versicolor

5.0, 2.3, 3.3, 1.0, Iris-versicolor

5.6, 2.7, 4.2, 1.3, Iris-versicolor

5.7, 3.0, 4.2, 1.2, Iris-versicolor

5.7, 2.9, 4.2, 1.3, Iris-versicolor

6.2, 2.9, 4.3, 1.3, Iris-versicolor

5.1, 2.5, 3.0, 1.1, Iris-versicolor

5.7, 2.8, 4.1, 1.3, Iris-versicolor

6.3, 3.3, 6.0, 2.5, Iris-virginica

5.8, 2.7, 5.1, 1.9, Iris-virginica

7.1, 3.0, 5.9, 2.1, Iris-virginica

6.3, 2.9, 5.6, 1.8, Iris-virginica

6.5, 3.0, 5.8, 2.2, Iris-virginica

7.6, 3.0, 6.6, 2.1, Iris-virginica

4.9, 2.5, 4.5, 1.7, Iris-virginica

7.3, 2.9, 6.3, 1.8, Iris-virginica

6.7, 2.5, 5.8, 1.8, Iris-virginica

7.2, 3.6, 6.1, 2.5, Iris-virginica

6.5, 3.2, 5.1, 2.0, Iris-virginica

6.4, 2.7, 5.3, 1.9, Iris-virginica

6.8, 3.0, 5.5, 2.1, Iris-virginica

5.7, 2.5, 5.0, 2.0, Iris-virginica

5.8, 2.8, 5.1, 2.4, Iris-virginica

6.4, 3.2, 5.3, 2.3, Iris-virginica

6.5, 3.0, 5.5, 1.8, Iris-virginica

7.7, 3.8, 6.7, 2.2, Iris-virginica

7.7, 2.6, 6.9, 2.3, Iris-virginica

6.0, 2.2, 5.0, 1.5, Iris-virginica

6.9, 3.2, 5.7, 2.3, Iris-virginica

5.6, 2.8, 4.9, 2.0, Iris-virginica

7.7, 2.8, 6.7, 2.0, Iris-virginica

6.3, 2.7, 4.9, 1.8, Iris-virginica

6.7, 3.3, 5.7, 2.1, Iris-virginica

7.2, 3.2, 6.0, 1.8, Iris-virginica

6.2, 2.8, 4.8, 1.8, Iris-virginica

6.1, 3.0, 4.9, 1.8, Iris-virginica

6.4, 2.8, 5.6, 2.1, Iris-virginica

7.2, 3.0, 5.8, 1.6, Iris-virginica

7.4, 2.8, 6.1, 1.9, Iris-virginica

7.9, 3.8, 6.4, 2.0, Iris-virginica

6.4, 2.8, 5.6, 2.2, Iris-virginica

6.3, 2.8, 5.1, 1.5, Iris-virginica

6.1, 2.6, 5.6, 1.4, Iris-virginica

7.7, 3.0, 6.1, 2.3, Iris-virginica

6.3, 3.4, 5.6, 2.4, Iris-virginica

6.4, 3.1, 5.5, 1.8, Iris-virginica

6.0, 3.0, 4.8, 1.8, Iris-virginica

6.9, 3.1, 5.4, 2.1, Iris-virginica

6.7, 3.1, 5.6, 2.4, Iris-virginica

6.9, 3.1, 5.1, 2.3, Iris-virginica

5.8, 2.7, 5.1, 1.9, Iris-virginica

6.8, 3.2, 5.9, 2.3, Iris-virginica

6.7, 3.3, 5.7, 2.5, Iris-virginica

6.7, 3.0, 5.2, 2.3, Iris-virginica

6.3, 2.5, 5.0, 1.9, Iris-virginica

6.5, 3.0, 5.2, 2.0, Iris-virginica

6.2, 3.4, 5.4, 2.3, Iris-virginica

5.9, 3.0, 5.1, 1.8, Iris-virginica

生成数据描述文件

DirichletDriver.main(args);

--path (-p)

数据路径

--file (-f)

生成的描述文件路径

--descriptor (-d)

描述。I 表示忽略该属性,N表示数值类型属性,C表示类别类型属性,L表示类型

该数据四个数值属性,一个类型。描述字符串为,“4NL”

String  [] args={"-p","df/iris.data","-f","df/iris.info","-d","4","N","L"};

Describe.main(args);

训练API

Describe.main(args);

--oob

可选值,表示是否估计out-of-bag错误

--data (-d)

输入路径

--dataset (-ds)

数据表述文件路径

--selection (-sl)

每棵树随机选取的属性数

--seed (-sd)

可选值,随机数种子

--partial (-p)

是否由部分数据生成树

--nbtrees (-t)

树的棵树

--output (-o)

输出模型路径

 

训练示例

public void train() throws Exception{

String   [] args ={"-d","df/iris.data","-ds","df/iris.info",

"-sl","3","-p","-t","10","-o","df/irismodel"};

BuildForest.main(args);

}

 

测试、分类API

TestForest.main(args);

--input (-i)

输入路径

--dataset (-ds) dataset

数据表述文件路径

--model (-m) path

模型路径

--output (-o)

输出路径

--analyze (-a)

是否分析测试结果

--mapreduce (-mr)

用MapReduce模式运行

 

测试、分类示例

String  [] arg ={"-i","df/iris.data","-ds","df/iris.info",

"-m","df/irismodel","-o","df/iris.out","-a","-mr"};

TestForest.main(arg);

 

评估结果

Summary

-------------------------------------------------------

Correctly Classified Instances          :        150             100%

Incorrectly Classified Instances        :          0          0%

Total Classified Instances              :        150

=======================================================

Confusion Matrix

-------------------------------------------------------

a         b         c         d         <--Classified as

50        0         0         0          |  50        a     = Iris-setosa

0         50        0         0          |  50        b     = Iris-versicolor

0         0         50        0          |  50        c     = Iris-virginica

0         0         0         0          |  0         d     = unknown

Default Category: unknown: 3

 

分类结果:0,1,2分别表示类型为Iris-setosa,Iris-versicolor和Iris-virginica.

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

 

 

 

 

 

 

 

 

六、参考文档

1.《 Random Forest -Classification and Regression By Random Forest》

2.《基于云计算平台的随机森林算法的研究与实现》

2.博客:http://blog.csdn.net/abcjennifer/article/details/8164315

Mahout决策森林的更多相关文章

  1. 4-Spark高级数据分析-第四章 用决策树算法预测森林植被

    预测是非常困难的,更别提预测未来. 4.1 回归简介 随着现代机器学习和数据科学的出现,我们依旧把从“某些值”预测“另外某个值”的思想称为回归.回归是预测一个数值型数量,比如大小.收入和温度,而分类则 ...

  2. 机器学习系列------1. GBDT算法的原理

    GBDT算法是一种监督学习算法.监督学习算法需要解决如下两个问题: 1.损失函数尽可能的小,这样使得目标函数能够尽可能的符合样本 2.正则化函数对训练结果进行惩罚,避免过拟合,这样在预测的时候才能够准 ...

  3. 机器学习的Spark与Scala开发简介

     一.机器学习常用开发软件:Spark.Scala 1. Spark简介: MLlib包含的库文件有: 分类 降维 回归 聚类 推荐系统 自然语言处理 在线学习 统计学习方法:偏向理论性,数理统计的方 ...

  4. 机器学习数学|Taylor展开式与拟牛顿

    机器学习中的数学 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原创文章,如需转载请保留出处 本博客为七月在线邹博老师机器学习数学课程学习笔记 Taylor 展式与拟牛顿 索引 taylor ...

  5. 解读“Deep Neural Decision Forests” 2015 Winner of the David Marr Prize

    2015ICCV会议最佳论文奖,即有着"计算机视觉界最高奖"之称的马尔奖(Marr Prize)授予了由微软剑桥研究院(Microsoft Research, Cambridge  ...

  6. 微软推 Azure 机器学习工具:Algorithm Cheat Sheet

    微软推 Azure 机器学习工具:Algorithm Cheat Sheet [日期:2015-05-15] 来源:CSDN  作者:Linux [字体:大 中 小]   Azure Machine ...

  7. AI零基础入门之人工智能开启新时代—下篇

    人工智能概述 人工智能的定义 · 人工智能是通过机器来模拟人类认识能力的一种科技能力 · 人工智能最核心的能力就是根据给定的输入做出判断或预测 · 思考:通过什么途径才能让机器具备这样的能力? · 举 ...

  8. Decision tree(决策树)算法初探

    0. 算法概述 决策树(decision tree)是一种基本的分类与回归方法.决策树模型呈树形结构(二分类思想的算法模型往往都是树形结构) 0x1:决策树模型的不同角度理解 在分类问题中,表示基于特 ...

  9. [Tensorflow] Cookbook - Retraining Existing CNNs models - Inception Model

    From: https://github.com/jcjohnson/cnn-benchmarks#alexnet 先大概了解模型,再看如果加载pre-training weight. 关于retai ...

随机推荐

  1. MongoDB 连接

    启动 MongoDB服务 在前面的教程中,我们已经讨论了如何启动MongoDB服务,你只需要在MongoDB安装目录的bin目录下执行'mongod'即可. 执行启动操作后,mongodb在输出一些必 ...

  2. 从输入url到页面返回到底发生了什么

    1. 前言 Google应该是开发者平日里用得最多的网站之一,今早笔者在浏览器地址栏里键入www.google.com的时候,突然想了解下这背后的网络通信过程究竟是怎么样的.毕竟自己也算是一名Web开 ...

  3. 高端技巧:如何使用#define定义变量

    Introduction 想在源文件中定义一个跟行号有关的变量,每次都手动输入实在是太慢了,本文介绍如何使用宏定义来定义与行号有关的变量. 例如:我们想在源代码的第10行定义A_10这样的一个整形变量 ...

  4. Android艺术开发探索第四章——View的工作原理(下)

    Android艺术开发探索第四章--View的工作原理(下) 我们上篇BB了这么多,这篇就多多少少要来点实战了,上篇主席叫我多点自己的理解,那我就多点真诚,少点套路了,老司机,开车吧! 我们这一篇就扯 ...

  5. XMPP(一)-openfire服务端的安装和搭建

    XMPP全称:可扩展通讯和表示协议 简介:可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯.表示和需求响应服务中的XML数据元流式传输.XMPP以Jabber协议为基础,而Jabber是即时通 ...

  6. Java并发框架——同步状态的管理

    整个AQS框架核心功能都是围绕着其32位整型属性state进行,一般可以说它表示锁的数量,对同步状态的控制可以实现不同的同步工具,例如闭锁.信号量.栅栏等等.为了保证可见性此变量被声明为volatil ...

  7. Latex 表格内文字过长自动换行

    法一: [plain] view plaincopy \begin{tabular}{m{5cm}} 法二: [plain] view plaincopy \begin{tabular}{p{0.9\ ...

  8. Xcode中Groups和Folder的区别

    以前一直没有在意这个问题,今天"中奖"了 ;( 在Xcode文件夹视图中会发现2种颜色的文件夹图标:黄色和蓝色. 黄色表示组(groups),蓝色表示文件夹(folder). 组只 ...

  9. 【一天一道LeetCode】#114. Flatten Binary Tree to Linked List

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  10. mysql filesort 的解决方案

    在explain我们所使用的sql的时候,经常会遇到using filesort这种情况,原以为是由于有相同列值的原因引起,结果昨天看到公司的一个sql,跟同事讨论了下加上自己又做了一些测试,突然发现 ...