一. python环境下生成PMML

1. sklearn接口的xgboost

需要用sklearn2pmml包来生成pmml文件,一共有两种方法:

方法一: 在管道pipeline中进行fit后保存为pmml文件

from xgboost.sklearn import XGBClassifierbst=XGBClassifier(learning_rate=eta,     # learning_raten_estimators=num_rounds,booster='gbtree',objective='binary:logistic',silent=1,    # 为0打印运行信息;设置为1静默模式,不打印gamma=0.2,      # min_split_loss](分裂最小loss)参数的值越大,算法越保守max_depth=3,subsample=0.7,  #参数控制对于每棵树,随机采样的比例 减小避免过拟合,  典型值:0.5-1,0.5代表平均采样,防止过拟合.reg_lambda=6,colsample_bytree=0.8,    #树级列采样min_child_weight=570,        # 决定最小叶子节点样本权重和,缺省值=1,避免过拟合. 值过高,会导致欠拟合verbosity=1,scale_pos_weight=14,     # 通常可以将其设置为负样本的数目与正样本数目的比值seed=9999,random_state=9999)model_type='classifier'
bst = PMMLPipeline([(model_type, bst)])
params = {"classifier__eval_set":[(X['val'],Y['val'])],"classifier__early_stopping_rounds": early_stopping_rounds,"classifier__eval_metric":'auc'}bst.fit(X['train'],Y['train'], **params)# 转为PMML文件
from sklearn2pmml import PMMLPipeline,sklearn2pmml
sklearn2pmml(bst, "xgb.pmml", with_repr = True, debug = True)
# 或者调用nyoka
from nyoka import xgboost_to_pmml
xgboost_to_pmml(pipeline, features, target, "xgb.pmml")

补充说明:pipline中还可通过DataFrameMaper存放数预处理相关步骤,但目前可支持的数据处理操作有限

附:pipline参数说明

方法二: 直接将pkl文件转为pmml文件

bst = joblib.load(model_filedir + "xgb.pkl")from sklearn_pandas import DataFrameMapper
mapper = DataFrameMapper([([i], None) for i in features])
from sklearn2pmml import PMMLPipeline, sklearn2pmml
pipeline = PMMLPipeline([('mapper', mapper), ("classifier", bst)])
sklearn2pmml(pipeline, model_filedir+'xgb.pmml', with_repr=True)

注意:方法二无法指定ntree_limit之类的参数

2. xgboost原生接口

方法:jpmml-xgboost

原生xgboost.core库生成的XGBoost模型,不能使用sklearn2pmml生成pmml文件,只能通过jpmml-xgboost包,将已有的.bin或.model格式模型文件转为pmml文件

jpmml-xgboost需要包含入模标签的fmap文件和.model格式的模型文件,其中fmap文件生成方法:

### step1.  获取到.model模型文件
# 若建模时仅生成了.pkl文件,可通过下述代码转为.model文件
with open(pickle_file_path, 'rb') as f:xgb = pickle.load(f)
xgb.save_model(str(model_file_path))### step2.  生成fmap文件
'''
fmap(feature map file):实现feature id和feature name的对应
格式为 featmap.txt: <featureid> <featurename> <q or i or int>\n
Feature id从0开始直到特征的个数为止,从小到大排列。
i表示是二分类特征
q表示数值变量,如年龄,时间等。q可以缺省
int表示特征为整数(when int is hinted, the decision boundary will be integer)
可根据以下语句通过读取pkl文件的feature_name生成,或者根据feature顺序通过别的方式生成
'''features = xgb.feature_names
file_name = 'xgb.fmap'def create_feature_map(file_name,features):outfile = open(file_name, 'w')for i, feat in enumerate(features):outfile.write('{0}\t{1}\tq\n'.format(i, feat))create_feature_map(file_name, features)

jpmml-xgboost的环境配置及pmml转换指令为:

step1. 下载jpmml-xgboost
step2. 命令行切换到jpmml-xgboost的项目文件夹,输入代码编译

mvn clean install

该步执行完后,jpmml-xgboost的项目文件夹下会多出一个target文件夹,里面包含生成好的jar包:

step3. jar包转换为pmml文件

java -jar target/jpmml-xgboost-executable-1.4-SNAPSHOT.jar  --X-nan-as-missing False --X-ntree-limit 93 --model-input xgb.model --fmap-input xgb.fmap --target-name target --pmml-output xgb_pmml.pmml

该步代码仅–model-input 、–fmap-input、–pmml-output为必须,其他参数根据模型要求填写。
–X-nan-as-missing:是否将nan作为缺失值,默认True
–X-ntree-limit:模型中包含early_stopping时,需要xgb.best_ntree_limit打印原模型早停数,并给该参数赋值

补:lightGBM与XGBoost步骤类似
step1. get clone jpmml-lightgbm
step2. 切换到jpmml-lightgbm/文件夹下执行mvn clean install,执行完毕后targe目录下会生成jpmml-lightgbm-executable-1.3-SNAPSHOT.jar
step3. 将txt格式的模型文件转pmml

bst.save_model(result_path+'lgb_model.txt')
java -jar target/jpmml-lightgbm-executable-1.3-SNAPSHOT.jar --lgbm-input lgb_model.txt --pmml-output lgb_model.pmml

二. PMML文件读取调用,作预测

1. java

这个网上有很多,可参考
GitHub - jpmml/jpmml-evaluator: Java Evaluator API for PMML
https://www.cnblogs.com/pinard/p/9220199.html
https://zhuanlan.zhihu.com/p/30378213

2. python

(1)pypmml

from pypmml import Model
model = Model.fromFile('xgboost.pmml')
df['prob_test']=model.predict(X[features])['probability(1)']

(2)sklearn_model_pmml
相关博客,未验证仅供参考

三. PMML相关开源库汇总

参考自

1. PMML模型转换库,生成PMML:

Python模型:

  • Nyoka,支持Scikit-Learn,LightGBM,XGBoost,Statsmodels和Keras

  • JPMML系列,比如JPMML-SkLearn、JPMML-XGBoost、JPMML-LightGBM等,提供命令行程序导出模型到PMML

R模型:

  • R pmml
  • r2pmml
  • JPMML-R:提供命令行程序导出R模型到PMML

Spark:

  • Spark mllib,但是只是模型本身,不支持Pipelines,不推荐使用。
  • JPMML-SparkML,支持Spark ML pipleines。jpmml/jpmml-sparkml

2. 模型评估库,读取PMML:

Java:

  • JPMML-Evaluator,纯Java的PMML预测库,开源协议是AGPL V3
  • PMML4S,使用Scala开发,方便在Scala和Java中使用,接口简单好用,开源协议是常用的宽松协议Apache 2

Python:

  • PyPMML,Python库调用PMML,PyPMML是PMML4S包装的Python接口

Spark:

  • JPMML-Evaluator-Spark
  • PMML4S-Spark

PySpark:

  • PyPMML-Spark

REST API:

  • AI-Serving,同时为PMML模型提供REST和gRPC API,开源协议Apache 2
  • Openscoring,提供REST API,开源协议AGPL V3

参考:
机器学习平台系列(八) - 模型在线预测服务之模型转换PMML
Python模型上线pmml以及自定义函数转换
玩转jpmml之tpot+sklearn2pmml自动化机器学习集成模型部署

python环境下,XGBoost模型文件转pmml格式用于部署相关推荐

  1. Python环境下用中文做了个《王者荣耀》AI脚本,附视频

    <王者荣耀>AI最早的巅峰应该是在2018年 "AI(人工智能)"VS"人类明星战队",视频给你们留着了,先留着等会看. 梦泪被AI击杀6次,KPL ...

  2. Python环境下用中文做了个《王者荣耀》AI脚本

    <王者荣耀>AI最早的巅峰应该是在2018年 "AI(人工智能)"VS"人类明星战队" 以此为目标在python环境下开发了AI脚本自动打<王 ...

  3. python捷豹_图像处理基本工具——Python 环境下的 Pillow( PIL )

    由于笔者近期的研究课题与图像后处理有关,需要通过图像处理工具对图像进行变换和处理,进而生成合适的训练图像数据.该系列文章即主要记录笔者在不同的环境下进行图像处理时常用的工具和库.在 Python 环境 ...

  4. python环境下数据操作_数据分析环境搭建和Python基础知识

    搭建数据分析环境主要包括使用anaconda管理包和环境:使用Jupyter notebook将说明文本.数学方程.代码和可视化内容全部组合到一个易于共享的文档中.Python基础知识包括关键点(数据 ...

  5. Python环境下OpenCV视频流的多线程处理方式

    目录 前言 Python多线程编程 OpenCV视屏流的多线程处理 结语 前言 最近在功能性测试的过程中,需要在Python环境下用OpenCV读取网络摄像头的视频流,接着用目标检测器进行视屏帧的后续 ...

  6. Anaconda环境下的wheel文件安装

    whl格式本质上是一个压缩包,里面包含了py文件,以及经过编译的pyd文件.使得可以在不具备编译环境的情况下,选择合适自己的python环境进行安装 wheel文件做为自定义包的压缩文件 1.打开An ...

  7. Windows环境下安装wdl文件

    网上有写介绍Windows环境下安装wdl文件的方法,有些方法非常麻烦,经过研究,个人觉得比较简单的方法如下: 安装pip 从https://pypi.python.org/pypi/pip#down ...

  8. windows环境下新建.txt文件,使其默认以UTF-8编码

    问题的引出: windows环境下新建.txt文件,默认以ANSI格式编码.这种格式编码的文件,放到ubuntu上很可能会乱码. 于是我就想,如何设置windows,才能使新建的.txt文件默认以UT ...

  9. Oracle-11g-R2 RAC 环境下 GPnP Profile 文件

    GPnP Profile 文件的作用: GPnP Profile 文件是一个保存于 $GRID_HOME/gpnp/<hostname>/profiles/peer 目录下的小型 XML ...

最新文章

  1. 文件服务器定时开关机,如何配置作服务器定时开关机.ppt
  2. python textwrap_python2.7.3编译python模块学习- textwrap 文本包装和填充
  3. MySQL-8.0.12源码安装实例
  4. 如何查看 Linux是32位还是64位?
  5. 《编程珠玑(续)(修订版)》—第2章2.1节Awk中的关联数组
  6. Bootstrap缩略图.thumbnail
  7. linux根据进程的运行路径,停止进程
  8. slickedit快捷键冲突问题
  9. cad计算机忘了保存,cad图纸没保存怎么恢复(电脑突然断电,怎么找回未保存的CAD?)...
  10. Hexo添加可控制网易云音乐播放器
  11. java8 foreach 异常_在java 8流foreach中抛出异常
  12. 《铁血残明》的经典章节“猛虎桥”配图及动漫技术讨论
  13. 视界云联合创始人姜飞 荣获品途2017年NBI商业影响力新锐人物奖
  14. 注册Office教育版账号流程实现oneDrive1TB储存
  15. GPS的一些浅显知识兼介绍一下GPS测试仪
  16. SAR成像系列:【8】合成孔径雷达(SAR)成像算法-压缩感知(Compressed Sensing,CS)成像算法(附Matlab代码)
  17. 大型OA协同办公系统 - 利用力软工作流引擎实现复杂业务流程
  18. Vue 2 项目和插件使用
  19. 数据结构-顺序表的顺序存储
  20. 大华摄像头二次开发-web端实现实时视频监控

热门文章

  1. CodeForces - 29B Traffic Lights【水题】
  2. CNC加工中心的G代码详细解析
  3. Unity Shaderlab: Object Outlines 转
  4. 图像处理学习笔记(3)—— 图像的数学运算
  5. Excel如何快速统计及格人数
  6. MySQL狂神说commons-pool-1.6免费下载
  7. 大家都用得起的Revit工具,BIM建模助手正式上线
  8. k8s-redis 集群部署(李作强)
  9. 在OpenCV里实现负片函数imcomplement
  10. AWS从入门到实战 之 创建账户