[机器学习] PMML实现模型上线

机器学习在用于产品的时候,经常会遇到跨平台的问题。

比如用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环境比如Java,为了上一个机器学习模型去大动干戈修改环境配置很不划算,此时我们就可以考虑用预测模型标记语言(Predictive Model Markup Language,以下简称PMML)来实现跨平台的机器学习模型部署。

 

一. PMML概述

PMML是数据挖掘的一种通用的规范,它用统一的XML格式来描述我们生成的机器学习模型。这样无论你的模型是sklearn,R还是Spark MLlib生成的,我们都可以将其转化为标准的XML格式来存储。当我们需要将这个PMML的模型用于部署的时候,可以使用目标环境的解析PMML模型的库来加载模型,并做预测。

可以看出,要使用PMML,需要两步的工作,都需要相关的库支持。

  1. 将离线训练得到的模型转化为PMML模型文件
  2. 将PMML模型文件载入在线预测环境,进行预测

 

二. PMML模型的生成和加载相关类库

大部分模型都可以用PMML的方式实现

  • jpmml的说明文档:GitHub - jpmml/jpmml-evaluator: Java Evaluator API for PMML
  • Jpmml支持的转换语言,主流的机器学习语言都支持了;
  • 从下图可以看到,它支持R、python和spark、xgboost、lightgbm等模型的转换,用起来非常方便;

[机器学习] PMML实现模型上线_第1张图片
 

三、工具的工程实践:

1. Python模型上线,使用了模型转换成PMML上线方法

如果我们使用的是sklearn,那么可以使用sklearn2pmml这个python库来做模型文件的生成,这个库安装很简单,使用"pip install sklearn2pmml"即可。python-sklearn里面的模型都支持,也支持xgboost,并且PCA,归一化可以封装成preprocess转换成PMML,所以调用起来很方便。特别需要注意的是:缺失值的处理会影响到预测结果,大家可以可以看一下, 用PMML方式预测,模型预测一条记录速度是1ms,可以用这个预测来预估一下根据你的数据量,整体的速度有多少

2. 如果使用的是Spark MLlib, 这个库有一些模型已经自带了保存PMML模型的方法,可惜并不全。如果是R,则需要安装包"XML"和“PMML”。此外,JAVA库JPMML可以用来生成R,SparkMLlib,xgBoost,Sklearn的模型对应的PMML文件。github地址是:https://github.com/jpmml/jpmml。加载PMML模型需要目标环境支持PMML加载的库,如果是JAVA,则可以用JPMML来加载PMML模型文件。

 

 

 

 

https://zhuanlan.zhihu.com/p/39021238

 

 

你可能感兴趣的:(机器学习,pmml,机器学习)