内容简介:01
“ Spark推荐 排序 系列文章之GBDT(梯度提升决策树)介绍 ”
01
—
前言
【Spark排序算法系列】主要介绍的是目前推荐系统或者广告点击方面用的比较广的几种算法,和他们在Spark中的应用实现,本篇文章主要介绍GBDT算法,本系列还包括(持续更新):
-
Spark排序算法系列之LR(逻辑回归)
-
Spark排序算法系列之模型融合(GBDT+LR)
-
Spark排序算法系列之XGBoost
-
Spark排序算法系列之FTRL(Follow-the-regularized-Leader)
-
Spark排序算法系列之FM与FFM
在本篇文章中你可以学到:
-
Spark MLLib包中的GBDT使用方式
-
模型的通过保存、加载、预测
-
PipeLine
-
ML包中的GBDT
02
—
概述
LR因为其容易并行最早应用到推荐排序中的,但学习能力有限,需要大量的特征工程来增加模型的学习能力。但大量的特征工程耗时耗力,且不一定带来效果的提升,因此在如何能有效的发现特征组合,来缩短LR特征实验周期的背景下,GBDT被应用了起来。GBDT模型全称是Gradient Boosting Decision Tree,梯度提升决策树。是属于Boosing算法中的一种,关于Boosting的介绍可以参考文章 集成学习(Ensemble Learning)
关于GBDT算法理解可参考:
其实相信很多人对Spark 机器学习包(ml和mllib)中的GBDT傻傻分不清楚,这里我们先来捋一捋。Spark中的GBDT较GBTs——梯度提升树,因为其是基于决策树(Decision Tree,DT)实现的,所以叫GBDT。Spark 中的GBDT算法存在于ml包和mllib包中,mllib是基于RDD的,ml包则是针对DataFrame的,ml包中的GBDT分为分类和回归,在实际使用过程中,需要根据具体情况进行衡量和选择。由于在实际生产环境中使用基于RDD的较多,所以下面将着重介绍下MLLib包中的GBTs,ML包中的将进行简单说明。
03
—
MLLib中的GBTs
在前边提到了GBTs是基于决策树(Decision Tree,DT), 所以不了解DT的朋友可以先进行学习,这里就不做过多解释。GBDT 在Spark中的使用方式如下描述
创建Spark对象并加载数据
GBDT参数初始化
模型训练与测试集加载
效果验证
模型保存
模型加载
数值预测
04
—
Pipeline
Spark ML Pipeline 的出现,是受到了 scikit-learn 项目的启发,并且总结了 MLlib 在处理复杂机器学习问题上的弊端,旨在向用户提供基于 DataFrame 之上的更加高层次的 API 库,以更加方便的构建复杂的机器学习工作流式应用。一个 Pipeline 在结构上会包含一个或多个 PipelineStage,每一个 PipelineStage 都会完成一个任务,如数据集处理转化,模型训练,参数设置或数据预测等,这样的 PipelineStage 在 ML 里按照处理问题类型的不同都有相应的定义和实现。接下来,我们先来了解几个重要概念。
-
DataFrame
相比RDD,DF包含了 schema 信息,更类似传统数据库中的二维表格。它被 ML Pipeline 用来存储源数据。DataFrame 可以被用来保存各种类型的数据,如我们可以把特征向量存储在 DataFrame 的一列中,这样用起来是非常方便的。
-
Transformer
Transformer 中文可以被翻译成转换器,是一个 PipelineStage,实现上也是继承自 PipelineStage 类,主要是用来把 一个 DataFrame 转换成另一个 DataFrame,比如一个模型就是一个 Transformer,因为它可以把 一个不包含预测标签的测试数据集 DataFrame 打上标签转化成另一个包含预测标签的 DataFrame,显然这样的结果集可以被用来做分析结果的可视化。
-
Estimator
Estimator 中文可以被翻译成评估器或适配器,在 Pipeline 里通常是被用来操作 DataFrame 数据并生产一个 Transformer,如一个随机森林算法就是一个 Estimator,因为它可以通过训练特征数据而得到一个随机森林模型。实现上 Estimator 也是继承自 PipelineStage 类。
-
Parameter
Parameter 被用来设置 Transformer 或者 Estimator 的参数。
要构建一个 Pipeline,首先我们需要定义 Pipeline 中的各个 PipelineStage,如指标提取和转换模型训练等。有了这些处理特定问题的 Transformer 和 Estimator,我们就可以按照具体的处理逻辑来有序的组织 PipelineStages 并创建一个 Pipeline,如 :
val pipeline = new Pipeline().setStages(Array(stage1,stage2,stage3,…))
然后就可以把训练数据集作为入参并调用 Pipelin 实例的 fit 方法来开始以流的方式来处理源训练数据,这个调用会返回一个 PipelineModel 类实例,进而被用来预测测试数据的标签,它是一个 Transformer。
比如在构建一个GBDT模型的时候,流程是这样的
05
—
ML包中的GBTs
从Spark 2.0开始,spark.mllib包中基于RDD的API已进入维护模式。 Spark的主要机器学习API现在是spark.ml包中基于DataFrame的API。接下来我们看下ml包中的GBDT(regression)。
加载数据训练模型
模型评估
其余相关代码可参考MLLib中的GBTs
本篇文章中涉及的代码可在github中找到:
https://github.com/Thinkgamer/Hadoop-Spark-Learning/tree/master/Spark
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 算法之常见排序算法-冒泡排序、归并排序、快速排序
- 排序算法之冒泡排序改进算法
- 快速排序算法,C语言快速排序算法深入剖析
- 排序算法下——桶排序、计数排序和基数排序
- 数据结构和算法面试题系列—排序算法之快速排序
- 数据结构和算法面试题系列—排序算法之基础排序
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First JavaScript程序设计
[美]Eric T. Freeman、[美] Elisabeth Robson / 袁国忠 / 人民邮电出版社 / 2017-9 / 129.00 元
本书语言和版式活泼,内容讲解深入浅出,是难得的JavaScript入门书。本书内容涵盖JavaScript的基本知识以及对象、函数和浏览器文档对象模型等高阶主题。书中配备了大量有趣的实例、图示和练习,让读者轻轻松松掌握JavaScript。一起来看看 《Head First JavaScript程序设计》 这本书的介绍吧!