AI模型部署

使用PMML部署机器学习模型

2019-11-26  本文已影响0人  aipredict

目录

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 定义了使用的元素和属性,主要由以下核心部分组成:

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


pmml-flow.png

PMML优点

PMML开源类库

模型转换库,生成PMML:

模型评估库,读取PMML:

PMML演示

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

  1. 使用Iris数据构建一个XGBoost模型,在建模之前对浮点数据进行标准化,利用Scikit-learn中的Pipeline:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
import pandas as pd
from xgboost import XGBClassifier

seed = 123456

iris = datasets.load_iris()
target = 'Species'
features = iris.feature_names
iris_df = pd.DataFrame(iris.data, columns=features)
iris_df[target] = iris.target

X, 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_pmml
xgboost_to_pmml(pipeline, features, target, "xgb-iris.pmml")
  1. 使用PyPMML来验证PMML预测值是否和原生Python模型一致:
from pypmml import Model
model = 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.Model
val 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开源类库,以及演示了如何生成和使用PMML。

虽然PMML有一些缺点和不足,但瑕不掩瑜,PMML的优点是要远远超过存在的缺点。如果您训练的模型可以导出PMML,建议使用PMML来部署,如果导出的PMML不能包含整个Pipelines,可以参考文章《自动部署PMML模型生成REST API》中介绍的部署自定义实时预测Web服务。

参考

上一篇 下一篇

猜你喜欢

热点阅读