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. Swift类型推测在可选调用中的小提示

    我们知道Swift中协议里也有对应于Objc中的可选方法或计算属性,当然协议必须以@objc伪指令修饰否则不可以哦. 如下示例: @objc protocol Transaction{ fun com ...

  2. Android安全升级的7.0: Nougat

    Tamic http://www.jianshu.com/users/3bbb1ddf4fd5/latest_articles 今年夏天以来,Google做了多种增强的安全性在Android的7.0N ...

  3. Ribbon WorkBench 当ValueRule的值为空时的设置

    在定制Ribbon按钮的规则的时候,有时需要根据某个字段值是否为空不设定Ribbon按钮的Display rules或Enable Rules,根据Crm的版本的不同,设置有所差别: 对于Dynami ...

  4. OpenCV:Mat元素访问方法、性能、代码复杂度以及安全性分析

    欢迎转载,尊重原创,所以转载请注明出处: http://blog.csdn.net/bendanban/article/details/30527785 本文讲述了OpenCV中几种访问矩阵元素的方法 ...

  5. Java继承时的初始化顺序

    Java程序在启动和运行时,需要首先完成初始化的工作.在涉及到继承.static成员变量等因素时,初始化的顺序就复杂起来.下面以一个例子说明继承时的Java初始化顺序. 例子: class Insec ...

  6. Android控制软键盘的弹出和隐藏

    弹出软键盘 前提:必须要有一个可以编辑的控件(EditText),并且当前已经获取焦点 /** * 弹出软键盘 */ public void openKeyboard(View view) { // ...

  7. PullToRefreshScrollView 嵌套RecyclerView实现特卖列表倒计时抢购

    不久之前,我们谈到了通过Handler与timer及TimerTask结合实现倒计时抢购列表,那个是PullToRefreshListView实现的,今天要讲的是PullToRefreshScroll ...

  8. 【移动开发】Context类bindService()参数

    bindService()是Context的一个方法,它是抽象的.函数原型的代码如下:(android 2.3.3) /** * Connect to an application service, ...

  9. Oracle AP Invoice APIs

     These APIs are handful when you want to do Insert, Update or Delete programmatically for some bus ...

  10. 剑指Offer——动态规划算法

    剑指Offer--动态规划算法 什么是动态规划? 和分治法一样,动态规划(dynamic programming)是通过组合子问题而解决整个问题的解. 分治法是将问题划分成一些独立的子问题,递归地求解 ...