本文主要以mllib 1.1版本为基础,分析决策树的基本原理与源码

一、基本原理

二、源码分析

  1、决策树构造

    指定决策树训练数据集与策略(Strategy)通过train函数就能得到决策树模型DecisionTreeModel

    决策树策略包含了:algo(算法类型:分类、回归),impurity(信息增益计算算法)、maxDepth(数最大深度)、

             numClassesForClassification(数分类分支数目,为2就是二叉数),maxBins(特征变量最大的分类数目限制)、

             quantileCalculationStrategy(分位数计算方法)、categoricalFeaturesInfo(每个特征的分类数目)

      

  2、模型训练

    (1)DecisionTree的模型训练函数train主要包含了findSplitsBins、findBestSplits、DecisionTreeModel三部分(入下图所示,为了方便分析,不重要的代码做了删减)

       步骤一:findSplitsBins找出数据集中每个变量(Features)对应的所有分裂方式

       步骤二:findBestSplits通过计算信息增益来寻找每个节点的最佳的分裂点

       步骤三:DecisionTreeModel构造决策树模型

        

    (2)findSplitsBins

      通过抽样的方法来近似分位数的计算,抽样样本的的最大数目为maxBins*maxBins

        

      针对每个变量进行迭代,如果是特征是连续变量,先对数据进行排序,然后对数据进行分箱,切成maxBins块,

      每块的数目是stride个。对于maxBins块数据则存在maxBins-1种分裂方式。  

        

      例如:数据集合data包含1000条数据,两个变量,第一个变量从0-999,第二个变量从999-0

        

      可以看出splits的分裂方式有99种

        

      具体split分裂点的threshold

        

      如果特征变量属于离散变量,又分为2种情况,有序的和无序的

      对于无序的离散变量,如果它有n个分类,则分裂的方式就有2^n-1种

        

      如下数据集合包含1000条数据,2个变量。每个变量包含2种分类且是无序的。通过debug可以看出每个变量都有3个split

        

spark(1.1) mllib 源码分析(三)-决策树的更多相关文章

  1. spark(1.1) mllib 源码分析(三)-朴素贝叶斯

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...

  2. spark(1.1) mllib 源码分析(二)-相关系数

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4024733.html 在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数 ...

  3. spark(1.1) mllib 源码分析(一)-卡方检验

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4019131.html 在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数 ...

  4. tomcat源码分析(三)一次http请求的旅行-从Socket说起

    p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...

  5. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  6. spark的存储系统--BlockManager源码分析

    spark的存储系统--BlockManager源码分析 根据之前的一系列分析,我们对spark作业从创建到调度分发,到执行,最后结果回传driver的过程有了一个大概的了解.但是在分析源码的过程中也 ...

  7. ABP源码分析三:ABP Module

    Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...

  8. ABP源码分析三十一:ABP.AutoMapper

    这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...

  9. ABP源码分析三十三:ABP.Web

    ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现. AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事一,在A ...

随机推荐

  1. 学习C#泛型

    C#泛型详解 C#菜鸟教程 C#中泛型的使用

  2. uva 11806 Cheerleaders (容斥)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  3. 关于RESTful一些注意事项,和自己整理的接口开发规范

    https://blog.csdn.net/u013731455/article/details/56278168 最近在研究restful,公司开发要使用,所以自己就去网上找了好些资料,并整理了一套 ...

  4. 2018-9-1-win10-uwp-轻量级-MVVM-框架入门-2.1.5.3199

    title author date CreateTime categories win10 uwp 轻量级 MVVM 框架入门 2.1.5.3199 lindexi 2018-09-01 16:24: ...

  5. HTML的基本结构和标签分类

    HTML:超文本标记语言 HTML基本结构 <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...

  6. CODE FESTIVAL 2017 qual A C Palindromic Matrix(补题)

    彩笔看到题目后,除了懵逼,没有啥反应了,唯一想的就是 这是不是dp啊?看了题解才发现,原来是这样啊. 画几个矩阵看看就能看出来规律. 思路:先假设这是个M * N的矩阵 如果M和N都是偶数,则每个出现 ...

  7. 禁用GPU版本TensorFlow,切换到CPU版本TensorFlow。

    #禁用gpu版本TensorFlow,因为CUDA号码从0开始,这里直接让CUDA使用-1的GPU,自然就无法使用gpu了. 代码前面加入: import osos.environ["CUD ...

  8. 排他网关(ExclusiveGateWay)

    网关(ExclusiveGateWay) 作者:邓家海2018年3月11日 00:13:25 情景:某一家公司最近在给一个单位做一个财务审批的OA.具体需求是这样的:当部门申请的金额小于一万块的时候, ...

  9. npm镜像及配置方法

    npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...

  10. HDU 1271

    这题做了好久..... 理解别人的代码都理解了好久!!!太弱太弱. #include<iostream> #include<algorithm> #include<cma ...