• python sklearn2pmml


    问题导读
    1.scikit-learn已经成为Python重要的机器学习库,那么如何将scikit-learn训练好的模型直接导出为PMML呢?  

    2.如何将原有pickle格式的模型文件转换为PMML?

    综述
    自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了。scikit-learn简称sklearn,支持包括分类、回归、降维和聚类四大机器学习算法。还包含了特征提取、数据处理和模型评估三大模块。
    sklearn拥有着完善的文档,上手容易,具有着丰富的API,在学术界颇受欢迎。sklearn已经封装了大量的机器学习算法,包括LIBSVM和LIBINEAR。同时sklearn内置了大量数据集,节省了获取和整理数据集的时间。
    本文介绍了如何将sklearn中的模型导出为PMML文件,方便后续的工程上线操作,内容包括涉及环境的搭建和中间遇到的坑。

    前置知识
    • Python 基本操作,会使用pip 或者Anaconda进行依赖库管理
    • Maven 基本操作
    • Java 命令基本操作

    sklearn2pmml 

    使用sklearn2pmml 可以在python中,训练完模型之后,直接将模型导出为PMML文件。
    软件版本
    • Python 2.7,3.4 或者更新。
    • scikit-learn 0.16.0 或者更新。
    • sklearn-pandas 0.0.10 或者更新。
    • sklearn2pmml 0.14.0 或者更新。
    安装scikit-learn
    使用pip 安装,命令如下:
    [Shell] 纯文本查看 复制代码
    1
    pip install -U scikit-learn


    使用conda 安装,命令如下:
    [Shell] 纯文本查看 复制代码
    1
    conda install scikit-learn


    个人强烈建议,使用Anaconda 进行Python 版本管理,使用conda命令进行安装。(貌似因为源的问题,conda中被墙的可能性小)
    详细内容,可以参见 sklearn 安装文档
    安装skkearn-pandas
    命令如下:
    [Shell] 纯文本查看 复制代码
    1
    pip install sklearn-pandas


    这个地方,如果因为被墙,可以去官网下载whl文件到本地,假设路径为”/data/users/miao18/sklearn_pandas-1.6.0-py2.py3-none-any.whl”然后
    [Shell] 纯文本查看 复制代码
    1
    pip install /data/users/miao18/sklearn_pandas-1.6.0-py2.py3-none-any.whl


    通过本地文件的方式安装。
    安装sklearn2pmml
    命令如下:
    [Shell] 纯文本查看 复制代码
    1
    pip install --user --upgrade git+[url=https://github.com/jpmml/sklearn2pmml.git]https://github.com/jpmml/sklearn2pmml.git[/url]


    校验是否安装成功
    进入Python 命令行,输入如下命令
    [Python] 纯文本查看 复制代码
    1
    2
    3
    4
    5
    6
    import sklearn, sklearn.externals.joblib, sklearn_pandas, sklearn2pmml
     
    print(sklearn.__version__)
    print(sklearn.externals.joblib.__version__)
    print(sklearn_pandas.__version__)
    print(sklearn2pmml.__version__)


    我的环境输出结果如下,符合要求:
    [Plain Text] 纯文本查看 复制代码
    1
    2
    3
    4
    0.19.1
    0.11
    1.6.0
    0.26.0


    使用方法
    使用iris数据集,训练一个简单的决策树模型,并导出为pmml。
    [Python] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    from sklearn2pmml import PMMLPipeline
    from sklearn.datasets import load_iris
    from sklearn import tree
    iris = load_iris()
    clf = tree.DecisionTreeClassifier()
    pipeline = PMMLPipeline([("classifier", clf)])
    pipeline.fit(iris.data, iris.target)
     
    # 导出为PMML
    from sklearn2pmml import sklearn2pmml
    sklearn2pmml(pipeline, "DecisionTreeIris.pmml", with_repr = True)


    工作目录下的DecisionTreeIris.pmml 就是导出的pmml文件。
    这里需要注意,sklearn中都是以pipeline 的形式进行转化的。原型如下:
    [Python] 纯文本查看 复制代码
    1
    sklearn2pmml(pipeline, pmml, user_classpath, with_repr, debug)
    jpmml-sklearn
    使用jpmml-sklearn,可以将一个现有的pickle格式的模型文件转换为PMML文件。
    软件版本
    • Python 2.7,3.4 或者更新。
    • scikit-learn 0.16.0 或者更新。
    • sklearn-pandas 0.0.10 或者更新。
    • sklearn2pmml 0.14.0 或者更新。
    • Java 1.8 或者更新。
    安装
    从github 下载源码,并安装:
    [Shell] 纯文本查看 复制代码
    1
    2
    git clone [url=mailto:git@github.com]git@github.com[/url]:jpmml/jpmml-sklearn.git
    mvn clean install


    执行完毕后,在target目录下有 一个 converter-executable-1.4-SNAPSHOT.jar 的jar文件。
    使用方法
    一个典型的workflow如下:
    • 使用Python 训练一个模型。
    • 将模型序列化为pickle,并存到本地。
    • 使用Java命令,将pickle文件转为pmml。
    Python 侧生成一个pickle 文件
    训练部分,和直接导出pmml类似,只是最后的落地文件,不直接导出为pmml,而是存成pickle文件,代码如下:
    [Python] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    from sklearn2pmml import PMMLPipeline
    from sklearn.datasets import load_iris
    from sklearn import tree
    iris = load_iris()
    clf = tree.DecisionTreeClassifier()
    pipeline = PMMLPipeline([("classifier", clf)])
    pipeline.fit(iris.data, iris.target)
     
    from sklearn.externals import joblib
    joblib.dump(pipeline, "pipeline.pkl.z", compress = 9)


    Java侧转换
    使用上文编译好的Jar包,进行转换,命令如下:
    [Shell] 纯文本查看 复制代码
    1
    java -jar target/jpmml-sklearn-executable-1.5-SNAPSHOT.jar --pkl-input pipeline.pkl.z --pmml-output pipeline.pmml


    总结
    分别使用了sklearn2pmml 和 jpmml-sklearn 进行导出pmml文件,操作过程类似。
    使用sklearn2pmml 的方式更为便捷,直接在python 中就可以导出,这意味着每次训练完模型,就能快速生成一个pmml文件。
    使用jpmml-sklearn,则可以对现有的pickle 文件进行操作。
    两者各有优劣,请使用者根据实际情况按需使用。
  • 相关阅读:
    数据库 Mysql事务详解
    数据库 Mysql内容补充二
    数据库 Mysql内容补充一
    优化Django ORM中的性能问题(含prefetch_related 和 select_related)
    django高级
    百度,谷歌,360,搜狗,神马等蜘蛛IP段
    中国电信、联通、移动、教育IP分布
    sed 给文件每行末尾追加相同字符
    centos7 lvs keepalived做DNS集群负载
    Notepad++ 删除空白行的方法
  • 原文地址:https://www.cnblogs.com/mmzhang/p/11413446.html
Copyright © 2020-2023  润新知