spark(1.1) mllib 源码分析(三)-决策树
本文主要以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 源码分析(三)-决策树的更多相关文章
- spark(1.1) mllib 源码分析(三)-朴素贝叶斯
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...
- spark(1.1) mllib 源码分析(二)-相关系数
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4024733.html 在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数 ...
- spark(1.1) mllib 源码分析(一)-卡方检验
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4019131.html 在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数 ...
- tomcat源码分析(三)一次http请求的旅行-从Socket说起
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- spark的存储系统--BlockManager源码分析
spark的存储系统--BlockManager源码分析 根据之前的一系列分析,我们对spark作业从创建到调度分发,到执行,最后结果回传driver的过程有了一个大概的了解.但是在分析源码的过程中也 ...
- ABP源码分析三:ABP Module
Abp是一种基于模块化设计的思想构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modu ...
- ABP源码分析三十一:ABP.AutoMapper
这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...
- ABP源码分析三十三:ABP.Web
ABP.Web模块并不复杂,主要完成ABP系统的初始化和一些基础功能的实现. AbpWebApplication : 继承自ASP.Net的HttpApplication类,主要完成下面三件事一,在A ...
随机推荐
- 学习C#泛型
C#泛型详解 C#菜鸟教程 C#中泛型的使用
- uva 11806 Cheerleaders (容斥)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- 关于RESTful一些注意事项,和自己整理的接口开发规范
https://blog.csdn.net/u013731455/article/details/56278168 最近在研究restful,公司开发要使用,所以自己就去网上找了好些资料,并整理了一套 ...
- 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: ...
- HTML的基本结构和标签分类
HTML:超文本标记语言 HTML基本结构 <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...
- CODE FESTIVAL 2017 qual A C Palindromic Matrix(补题)
彩笔看到题目后,除了懵逼,没有啥反应了,唯一想的就是 这是不是dp啊?看了题解才发现,原来是这样啊. 画几个矩阵看看就能看出来规律. 思路:先假设这是个M * N的矩阵 如果M和N都是偶数,则每个出现 ...
- 禁用GPU版本TensorFlow,切换到CPU版本TensorFlow。
#禁用gpu版本TensorFlow,因为CUDA号码从0开始,这里直接让CUDA使用-1的GPU,自然就无法使用gpu了. 代码前面加入: import osos.environ["CUD ...
- 排他网关(ExclusiveGateWay)
网关(ExclusiveGateWay) 作者:邓家海2018年3月11日 00:13:25 情景:某一家公司最近在给一个单位做一个财务审批的OA.具体需求是这样的:当部门申请的金额小于一万块的时候, ...
- npm镜像及配置方法
npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...
- HDU 1271
这题做了好久..... 理解别人的代码都理解了好久!!!太弱太弱. #include<iostream> #include<algorithm> #include<cma ...