在spark上构造随机森林模型过程的一点理解
这篇文章仅仅是为了帮助自己理解在分布式环境下是如何进行随机森林模型构建的,文章中记录的内容可能不太准确,仅仅是大致上的一个理解。
1.特征切分点统计
不管是连续取值型特征还是离散取值型特征,分裂树结点时都需要寻找最优特征的最优切分点。离散型特征还好一点,对连续型特征,其取值情况多,若是遍历所有数据样本,寻找特征的所有取值情况,然后找出全部的候选分割点,计算每个候选分割点下分割的效果,这个过程的空间和时间的耗费非常大。spark中采取的策略是,在数据样本集中进行随机采样,获取一定数量的样本,依据这批样本中各个特征的取值来计算特征切分点。当然,这样做会损失模型精度,但是提升了计算效率。
2.特征取值分箱
在spark上,不管特征是连续型还是离散型,取值都要分箱,目的是简化计算过程,连续型特征分箱还起到离散化作用。在分箱时,采取的是等频分箱。
经过1,2点中的内容,对原始样本数据进行一些预处理,后面就可以构建RF了。
3.逐层训练
在单机环境下,构建随机森林中每棵树时采用的是递归结点的方式,对左子节点和右子结点,不断地递归构建,直接从根结点到叶子结点,如果单机内存不够用,那么每次构建一个结点时都需要从磁盘中读取一次数据。I/O操作是很费时间的,假设子树个数为m,一棵树上结点个数为n,那么I/O次数为m*n,如果在spark中也按照这种方式来构建随机森林,还有数据传输时网络带宽的开销,在数据量很大时这种方式的效率是不敢想的,因此在spark中构建随机森林时采用了“逐层训练”的方式。
“层” 指树的深度,不同深度代表不同的层。逐层训练过程中,每从样本数据集中读取一次数据时, 就把随机森林中所有树上同一层的结点构建完毕,这样I/O操作的次数就是树的最大深度。以根节点的构造过程为例,说明逐层训练是如何进行:
(1)样本数据集在hdfs上存储时会有多个分区partition,假设RF中有k棵树,在每个partition上首先会对每个样本进行k次0/1抽样(当然,这里也可以设置每个树使用的数据样本占总样本数的比例,不过spark默认是1,这里就以1为例来说明),以此来决定该样本是否用于构建决策树p(p=1,2,...,k);
(2)每棵树会在某个partition所属的服务器上构建,那么在构建RF的第一层、树的根节点时,需要在属于某棵树的样本中寻找最优特征及其最优分割点,在第1,2点中已经描述了切分点选择与分箱的内容,那此时spark中的做法是,先在每个partition上统计每个特征、每个分割点下样本类别的分布情况,然后再把各个partition的统计结果汇总起来,计算结点分割后的gini指数变化(如果是采用gini指数),这样最终可以计算出最优特征及其最优分割点,通过这样的方式,可以把所有的根节点全部构建出来;
(3)根节点构建完成后,一棵树上样本会依据划分结果被标记其属于左子节点还是右子节点(这种标记在之后会不断的更新),那在左子结点和右子结点上,又会重复着根节点上进行的操作,这样可以构建RF上第二层的结点,后续的过程类似,以上就是逐层训练的大致过程。
在spark上构造随机森林模型过程的一点理解的更多相关文章
- python的随机森林模型调参
一.一般的模型调参原则 1.调参前提:模型调参其实是没有定论,需要根据不同的数据集和不同的模型去调.但是有一些调参的思想是有规律可循的,首先我们可以知道,模型不准确只有两种情况:一是过拟合,而是欠拟合 ...
- daal4py 随机森林模型训练mnist并保存模型给C++ daal predict使用
# daal4py Decision Forest Classification Training example Serialization import daal4py as d4p import ...
- lkl风控.随机森林模型测试代码spark1.6
/** * Created by lkl on 2017/10/9. */ import org.apache.spark.sql.hive.HiveContext import org.apache ...
- Spark随机森林实现学习
前言 最近阅读了spark mllib(版本:spark 1.3)中Random Forest的实现,发现在分布式的数据结构上实现迭代算法时,有些地方与单机环境不一样.单机上一些直观的操作(递归),在 ...
- spark 随机森林算法案例实战
随机森林算法 由多个决策树构成的森林,算法分类结果由这些决策树投票得到,决策树在生成的过程当中分别在行方向和列方向上添加随机过程,行方向上构建决策树时采用放回抽样(bootstraping)得到训练数 ...
- 使用基于Apache Spark的随机森林方法预测贷款风险
使用基于Apache Spark的随机森林方法预测贷款风险 原文:Predicting Loan Credit Risk using Apache Spark Machine Learning R ...
- 笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 本内容来源于CDA-DSC课程内容,原内容为& ...
- R语言︱机器学习模型评估方案(以随机森林算法为例)
笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...
- Spark随机森林实战
package big.data.analyse.ml.randomforest import org.apache.spark.ml.Pipeline import org.apache.spark ...
随机推荐
- 女儿拿着小天才电话手表问我App启动流程
前言 首先,new一个女儿, var mDdaughter = new 女儿("6岁","漂亮可爱","健康乖巧","最喜欢玩小天 ...
- 【自学编程】C语言编程简单的小程序,计算长方体体积!
计算长方体体积 有朋友会说长方体体积还不好算吗?长X宽X高.没错用计算器一下就可以出结果,编程反而麻烦些,但是我们说的是这种思维,如果复杂的重复运算的话写好程序就非常简单了. 简单运算下一个固定高度的 ...
- 【C语言编程学习笔记】利用462字节代码实现雅虎logo ACSII 动画!
ACSII 动画演示: 不过本文介绍的是另一个作品:c 代码实现雅虎 logo ACSII 动图. 运行后,你将会看到: 它是一个 20fps.抗锯齿的 Yahoo! logo ASCII 动 ...
- rabbitmq之后台管理和用户设置
前言 前面介绍了erlang环境的安装和rabbitmq环境安装,接下来介绍rabbitmq的web管理和用户设置. 启用后台管理插件 通过后台管理插件我们可以动态监控mq的流量,创建用户,队列等. ...
- wifi - 攻击环境准备
1.Windows 环境准备 对于Windows系统,只需要Windows XP SP2以上就行了,安装对应网卡驱动 2.Linux 环境准备 绝大多数黑客会选择Linux作为测试平台,因为绝大多数无 ...
- WAI-ARIA无障碍网页资料
一.ARIA是啥? WAI-ARIA指无障碍网页应用.主要针对的是视觉缺陷,失聪,行动不便的残疾人以及假装残疾的测试人员.尤其像盲人,眼睛看不到,其浏览网页则需要借助辅助设备,如屏幕阅读器,屏幕阅读机 ...
- 树和堆(julyedu网课整理)
date: 2018-12-05 16:59:15 updated: 2018-12-05 16:59:15 树和堆(julyedu网课整理) 1 定义 1.1 树的定义 它是由n(n>=1)个 ...
- 支持向量机(SVM)必备概念(凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件、KKT条件)
SVM目前被认为是最好的现成的分类器,SVM整个原理的推导过程也很是复杂啊,其中涉及到很多概念,如:凸集和凸函数,凸优化问题,软间隔,核函数,拉格朗日乘子法,对偶问题,slater条件.KKT条件还有 ...
- Java面试题集(一)问题清单
java基础篇: 1.1.Java基础 (1)面向对象的特性:继承.封装和多态 (2)final.finally.finalize 的区别 (3)Exception.Error.运行时异常与一般异常有 ...
- js 重排和重绘
1.什么是重排和重绘 浏览器下载完页面中的所有组件--HTML标记.JavaScript.CSS.图片之后会解析生成两个内部数据结构--DOM树和渲染树. DOM树表示页面结构,渲染树表示DOM节点如 ...