问题导读 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文件,方便后续的工程上线操作,内容包括涉及环境的搭建和中间遇到的坑。 前置知识
sklearn2pmml 使用sklearn2pmml 可以在python中,训练完模型之后,直接将模型导出为PMML文件。 软件版本
使用pip 安装,命令如下:
[Shell]
纯文本查看
复制代码
?
使用conda 安装,命令如下:
[Shell]
纯文本查看
复制代码
?
个人强烈建议,使用 Anaconda 进行Python 版本管理,使用conda命令进行安装。(貌似因为源的问题,conda中被墙的可能性小)
详细内容,可以参见 sklearn 安装文档
安装skkearn-pandas
命令如下:
[Shell]
纯文本查看
复制代码
?
这个地方,如果因为被墙,可以去官网下载 whl文件到本地,假设路径为”/data/users/miao18/sklearn_pandas-1.6.0-py2.py3-none-any.whl”然后
[Shell]
纯文本查看
复制代码
?
通过本地文件的方式安装。
安装sklearn2pmml
命令如下:
[Shell]
纯文本查看
复制代码
?
校验是否安装成功
进入Python 命令行,输入如下命令
[Python]
纯文本查看
复制代码
?
我的环境输出结果如下,符合要求:
[Plain Text]
纯文本查看
复制代码
?
使用方法 使用iris数据集,训练一个简单的决策树模型,并导出为pmml。
[Python]
纯文本查看
复制代码
?
工作目录下的DecisionTreeIris.pmml 就是导出的pmml文件。
这里需要注意,sklearn中都是以pipeline 的形式进行转化的。原型如下:
[Python]
纯文本查看
复制代码
?
使用jpmml-sklearn,可以将一个现有的pickle格式的模型文件转换为PMML文件。 软件版本
从github 下载源码,并安装:
[Shell]
纯文本查看
复制代码
?
执行完毕后,在target目录下有 一个 converter-executable-1.4-SNAPSHOT.jar 的jar文件。
使用方法
一个典型的workflow如下:
训练部分,和直接导出pmml类似,只是最后的落地文件,不直接导出为pmml,而是存成pickle文件,代码如下:
[Python]
纯文本查看
复制代码
?
Java侧转换
使用上文编译好的Jar包,进行转换,命令如下:
[Shell]
纯文本查看
复制代码
?
总结
分别使用了sklearn2pmml 和 jpmml-sklearn 进行导出pmml文件,操作过程类似。
使用sklearn2pmml 的方式更为便捷,直接在python 中就可以导出,这意味着每次训练完模型,就能快速生成一个pmml文件。 使用jpmml-sklearn,则可以对现有的pickle 文件进行操作。 两者各有优劣,请使用者根据实际情况按需使用。 |