千家信息网

如何使用PMML部署机器学习模型

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,如何使用PMML部署机器学习模型,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PMML简介预测模型标记语言PMML(Predicti
千家信息网最后更新 2026年11月02日如何使用PMML部署机器学习模型

如何使用PMML部署机器学习模型,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

PMML简介

预测模型标记语言PMML(Predictive Model Markup Language)是一套与平台和环境无关的模型表示语言,是目前表示机器学习模型的实际标准。从2001年发布的PMML1.1,到2019年最新4.4,PMML标准已经由最初的6个模型扩展到了17个模型,并且提供了挖掘模型(Mining Model)来组合多模型。

作为一个开放的成熟标准,PMML由数据挖掘组织DMG(Data Mining Group)开发和维护,经过十几年的发展,得到了广泛的应用,有超过30家厂商和开源项目(包括SAS,IBM SPSS,KNIME,RapidMiner等主流厂商)在它们的数据挖掘分析产品中支持并应用PMML,这些厂商应用详情见下表:PMML Powered

PMML标准介绍

PMML是一套基于XML的标准,通过 XML Schema 定义了使用的元素和属性,主要由以下核心部分组成:

  • 数据字典(Data Dictionary),描述输入数据。

  • 数据转换(Transformation Dictionary和Local Transformations),应用在输入数据字段上生成新的派生字段。

  • 模型定义 (Model),每种模型类型有自己的定义。

  • 输出(Output),指定模型输出结果。

PMML预测过程符合数据挖掘分析流程:

PMML优点

  • 平台无关性。PMML可以让模型部署环境脱离开发环境,实现跨平台部署,是PMML区别于其他模型部署方法最大的优点。比如使用Python建立的模型,导出PMML后可以部署在Java生产环境中。

  • 互操作性。这就是标准协议的最大优势,实现了兼容PMML的预测程序可以读取其他应用导出的标准PMML模型。

  • 广泛支持性。已取得30余家厂商和开源项目的支持,通过已有的多个开源库,很多重量级流行的开源数据挖掘模型都可以转换成PMML。

  • 可读性。PMML模型是一个基于XML的文本文件,使用任意的文本编辑器就可以打开并查看文件内容,比二进制序列化文件更安全可靠。

PMML开源类库

模型转换库,生成PMML:

  • Python模型:

    • Nyoka,支持Scikit-Learn,LightGBM,XGBoost,Statsmodels和Keras。https://github.com/nyoka-pmml/nyoka

    • JPMML系列,比如JPMML-SkLearn、JPMML-XGBoost、JPMML-LightGBM等,提供命令行程序导出模型到PMML。https://github.com/jpmml

  • R模型:

    • R pmml包:https://cran.r-project.org/web/packages/pmml/index.html

    • r2pmml:https://github.com/jpmml/r2pmml

    • JPMML-R:提供命令行程序导出R模型到PMML,https://github.com/jpmml/jpmml-r

  • Spark:

    • Spark mllib,但是只是模型本身,不支持Pipelines,不推荐使用。

    • JPMML-SparkML,支持Spark ML pipleines。https://github.com/jpmml/jpmml-sparkml

模型评估库,读取PMML:

  • Java:

    • JPMML-Evaluator,纯Java的PMML预测库,开源协议是AGPL V3。https://github.com/jpmml/jpmml-evaluator

    • PMML4S,使用Scala开发,同时提供Scala和Java API,接口简单好用,开源协议是常用的宽松协议Apache 2。https://github.com/autodeployai/pmml4s

  • Python:

    • PyPMML,PMML的Python预测库,PyPMML是PMML4S包装的Python接口。https://github.com/autodeployai/pypmml

  • Spark:

    • JPMML-Evaluator-Spark,https://github.com/jpmml/jpmml-evaluator-spark

    • PMML4S-Spark,https://github.com/autodeployai/pmml4s-spark

  • PySpark:

    • PyPMML-Spark,PySpark中预测PMML模型。https://github.com/autodeployai/pypmml-spark

  • REST API:

    • AI-Serving,同时为PMML模型提供REST API和gRPC API,开源协议Apache 2。https://github.com/autodeployai/ai-serving

    • Openscoring,提供REST API,开源协议AGPL V3。https://github.com/openscoring/openscoring

PMML演示

构建模型,完整Jupyter Notebook,请参考:xgb-iris-pmml.ipynb

  1. 使用Iris数据构建一个XGBoost模型,在建模之前对浮点数据进行标准化,利用Scikit-learn中的Pipeline:

from sklearn import datasetsfrom sklearn.model_selection import train_test_splitfrom sklearn.pipeline import Pipelinefrom sklearn.preprocessing import StandardScalerimport pandas as pdfrom xgboost import XGBClassifierseed = 123456iris = datasets.load_iris()target = 'Species'features = iris.feature_namesiris_df = pd.DataFrame(iris.data, columns=features)iris_df[target] = iris.targetX, y = iris_df[features], iris_df[target]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=seed)pipeline = Pipeline([    ('scaling', StandardScaler()),     ('xgb', XGBClassifier(n_estimators=5, seed=seed))])pipeline.fit(X_train, y_train)y_pred = pipeline.predict(X_test)y_pred_proba = pipeline.predict_proba(X_test)
  1. 使用Nyoka,把Pipeline导出PMML:

from nyoka import xgboost_to_pmmlxgboost_to_pmml(pipeline, features, target, "xgb-iris.pmml")
  1. 使用PyPMML来验证PMML预测值是否和原生Python模型一致:

from pypmml import Modelmodel = Model.load("xgb-iris.pmml")model.predict(X_test)

读取PMML,进行预测。以下使用PMML4S的Scala接口,您也可以使用它的Java接口,使用非常简单。完整程序,在以下Zeppelin Notebook中:https://github.com/aipredict/ai-deployment/blob/master/deploy-ml-using-pmml/pmml4s-demo.json

因为Github不支持浏览Zeppelin Notebook,可以访问以下地址浏览:https://www.zepl.com/viewer/github/aipredict/ai-deployment/master/deploy-ml-using-pmml/pmml4s-demo.json

import org.pmml4s.model.Modelval model = Model.fromFile("xgb-iris.pmml")val result = model.predict(Map("sepal length (cm)" -> 5.7, "sepal width (cm)" -> 4.4, "petal length (cm)" -> 1.5, "petal width (cm)" -> 0.4))

PMML缺点

PMML虽然有很多优点,但也并非毫无缺点,比如:

  • 支持不了所有的数据预处理和后处理操作。虽然PMML已经支持了几乎所有的标准数据处理方式,但是对用户一些自定义操作,还缺乏有效的支持,很难放到PMML中。

  • 模型类型支持有限。特别是缺乏对深度学习模型的支持,PMML下一版5.0会添加对深度模型的支持,目前Nyoka可以支持Keras等深度模型,但生成的是扩展的PMML模型。

  • PMML是一个松散的规范标准,有的厂商生成的PMML有可能不太符合标准定义的Schema,并且PMML规范允许厂商添加自己的扩展,这些都对使用这些模型造成了一定障碍。

关于如何使用PMML部署机器学习模型问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

模型 支持 数据 标准 厂商 应用 学习 接口 数据挖掘 环境 程序 机器 优点 文件 深度 问题 分析 开发 生成 最大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司 河南云网互联网络科技有限公司 科技互联网企业 没上市的科技互联网公司 互联网公司 科技公司 腾讯科技 互联网女皇 融贸通互联网科技 互联网科技素材视频竖屏 恒银科技与互联网金融 剑昆互联网络科技有限公司临桂 佳云科技和互联网广告 互联网与医疗科技 杭州壁岐互联网科技有限公司 玉溪新华互联网科技好不好 伊宁互联网科技做什么的 互联网第三次科技革命特征 北京市互联网新科技 广东工业互联网大赛深圳学泰科技 青岛易易互联网科技 武汉亿视互联网科技有限公司 喔噻互联网科技有限公司 亿人帮互联网科技有限公司 互联网科技财经 互联网科技汛 天津腾达互联网科技有限公司 广州新华互联网科技学校电竞方面 互联网科技平台产品运营 唐山双旺合互联网科技产业园 杭州融税互联网科技有限公司 颐高云石互联网科技
0