本文主要以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. uva 11754 Code Feat (中国剩余定理)

    UVA 11754 一道中国剩余定理加上搜索的题目.分两种情况来考虑,当组合总数比较大的时候,就选择枚举的方式,组合总数的时候比较小时就选择搜索然后用中国剩余定理求出得数. 代码如下: #includ ...

  2. iptables禁止代理端口

    #iptables -A INPUT -p tcp --dport 3128 -j REJECT

  3. Select multiple多选上移、下移

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...

  4. Python--day19--sys模块

    sys模块 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys. ...

  5. Vue之webpack的entry和output

    一.文件结构 二.index.html <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  6. .NET C#与Java比较——Servlet

    目录 1. Servlet 和 Ashx(一般处理程序) 2. Servlet 和 JSP 3. Servlet的生命周期 4. Java Filter 和 HttpModule,ActionFilt ...

  7. 高并发下载tomcat下的文件时,发生java.net.SocketException: Connection reset解决方案

    (1)问题产生:使用500个线程并发下载tomcat工程中的一个文件时,服务器出现java.net.SocketException: Connection reset异常, 客户端出现connect ...

  8. spring security (BCryptPasswordEncoder)加密及判断密码是否相同

    通过BCryptPasswordEncoder的加密的相同字符串的结果是不同的,如果需要判断是否是原来的密码,需要用它自带的方法. 加密: BCryptPasswordEncoder encode = ...

  9. JVM系统属性 OS环境变量 JVM启动参数

    JVM系统属性(System Properties) 1.不支持通过文件查看和设置系统属性 2.可以通过JDK自带的工具jvisulavm.exe查看 3.可以在Java程序中使用API来查看系统属性 ...

  10. 实体Bean

    持久化实体管理EntityManager EntityManager 在Java persistence规范中,EntityManager是为所有持久化操作提供服务的中枢.Persistence co ...