专栏名称: Python技术博文
分享有关Python知识,了解IT界最新技术,让我们一起从菜鸟变成大牛吧!
目录
相关文章推荐
Python爱好者社区  ·  生成式AI,彻底爆了! ·  昨天  
Python爱好者社区  ·  64k!确实可以封神了! ·  3 天前  
Python爱好者社区  ·  华为目标院校白名单(2025最新版) ·  4 天前  
Python爱好者社区  ·  近4年不租房睡车里省10万元!41岁程序员回 ... ·  2 天前  
Python爱好者社区  ·  强的离谱!CNN,yyds ·  2 天前  
51好读  ›  专栏  ›  Python技术博文

XGBoost在线出餐预测服务介绍

Python技术博文  · 公众号  · Python  · 2017-09-29 18:52

正文

请到「今天看啥」查看全文



在线预测,就是指把训练好的模型部署在线上应用系统中,提供预测接口和服务供其他应用系统调用。在线预测最关键的是特征的构建。出餐预测服务的输入特征使用点我达实时处理系统进行实时构建,其处理流程和架构如下图:


点我达实时处理系统会从通过各类实时采集组件采集到kafka中,然后使用spark/storm构建实时数据仓库(online DW)。再以实时数据仓库为基础,为各类实时需求提供数据支持。 在线预测服务还需要考虑的一点是,如何定期更新系统中的模型。模型的更新方式有主动定时拉取和被动推送两种方式。主动定时拉取方式优点是实现简单、资源消耗小,缺点是可控性小。而被动拉取方式反之。两种方式优缺点互补。基于点我达现有的服务基础框架,项目中选用了被动推送方式进行更新。



3.项目实施过程介绍



3.1 xgboost实现和安装介绍

XGBoost算法是在GBDT的基础上对boosting算法进行改进后的实现,内部使用的是决策树,决策树的具体选择可以是回归树(回归问题),也可以是分类树(分类问题)。单机版实现的核心代码使用C++开发完成。在C++版本的基础上,提供了Python、JAVA、Spark等版本的接口,但底层仍是调用C++模块实现,其余版本的接口只是做了一层Wripper。

算法的核心是建立决策树,单机版建树的计算逻辑如下:



建树过程是顺序从根节点开始,先选择可以作为叶子结点的特征,然后计算分割点,依次迭代直至树的最大深度。每次选择叶子结点,会并行的计算样本的所有特征的,然后选择gain或者weight等最大的特征作为结点。这个并行的特性,使得单机版的XGBoost训练效率很高。

Spark版本的建树逻辑基本和单机版一致,计算上区别在于:并行的特征计算在不同的服务器上进行,计算结果需要通过消息在Tracker(负责控制计算逻辑)上进行汇总。Spark版本的消息使用rabit(dmlc的开源通信框架)通信,该框架提供了容错的Allreduce and Broadcast的MPI接口。Spark版本的整体架构逻辑图如下:

由于本项目的训练数据量较大,因而使用Spark版本进行离线训练模型;鉴于公司使用JAVA的背景下,使用JAVA版本的接口提供服务。

对于这两个版本的安装,都需要完成两个步骤:首先,编译生成xgboost的C++版本的依赖,生成目标是libxgboost.so(linux/osx)或者libxgboost.dll(windos平台)两个文件。Spark版本依赖于Java版本,在C++版本的基础上,使用maven package生成JAVA版本,然后基于Java版本编译Spark版本XGBoost包。







请到「今天看啥」查看全文


推荐文章
Python爱好者社区  ·  生成式AI,彻底爆了!
昨天
Python爱好者社区  ·  64k!确实可以封神了!
3 天前
Python爱好者社区  ·  华为目标院校白名单(2025最新版)
4 天前
Python爱好者社区  ·  强的离谱!CNN,yyds
2 天前
墨香中华  ·  郁达夫:徜徉于山水之间
8 年前
娱乐新天地  ·  家有儿女,一家齐聚
8 年前