本文主要以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. 宝塔linux

    宝塔linux linux 定时任务管理

  2. pytorch学习笔记(十二):详解 Module 类

    Module 是 pytorch 提供的一个基类,每次我们要 搭建 自己的神经网络的时候都要继承这个类,继承这个类会使得我们 搭建网络的过程变得异常简单. 本文主要关注 Module 类的内部是怎么样 ...

  3. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

  4. H3C-PPPOE

    --------------pppoe拨号V7------------------------------- dialer-group 10 rule ip permit interface Dial ...

  5. 运行项目npm run dev时报错: ~Error: Cannot find module 'webpack-cli/bin/config-yargs', 原因是

    webpack@3.X运行项目npm run dev时报错: ~Error: Cannot find module 'webpack-cli/bin/config-yargs' 我的原因是:  web ...

  6. npx cowsay 让动物说话~

      发现个好玩的东东, 忍不住想分享出来, 好可爱, 哈哈哈~~   node环境执行命令:    npm i cowsay -D npx cowsay hello! npx cowsay -f sh ...

  7. 洛谷P3150 pb的游戏(1)题解 博弈论入门

    题目链接:https://www.luogu.org/problem/P3150 这道题目是博弈论的入门题. 我们以 必胜态 和 必败态 来讲解这个问题. 首先,下面的图片演示了前8个数的必胜态和必败 ...

  8. Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.3.RELEASE:repackage (repackage)

    解决方案是删除 pom.xml配置的问题 <build> <plugins> <plugin> <groupId>org.springframework ...

  9. 2019-10-31-Resharper-去掉注释拼写

    title author date CreateTime categories Resharper 去掉注释拼写 lindexi 2019-10-31 9:8:5 +0800 2018-09-04 1 ...

  10. Python--day42--mysql数据库--mysql前言