跨平台机器学习模型交互--Python sklearn训练的模型导出为PMML


1.scikit-learn已经成为Python重要的机器学习库,那么如何将scikit-learn训练好的模型直接导出为PMML呢?
2.如何将原有pickle格式的模型文件转换为PMML?

 

1). 使用sklearn2pmml 

1. 安装

  pip install sklearn2pmml

2. 验证安装正确与否

 

import sklearn, sklearn.externals.joblib, sklearn_pandas, sklearn2pmml print(sklearn.__version__) print(sklearn.externals.joblib.__version__) print(sklearn_pandas.__version__) print(sklearn2pmml.__version__)

3. 训练和导出模型的PMML

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 的形式进行转化的
 
2) 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 或者更新。
1. 安装
git clone  git@github.com/jpmml/jpmml-sklearn.git
mvn clean install
 
执行完毕后,在target目录下有 一个 converter-executable-1.4-SNAPSHOT.jar 的jar文件。
使用方法
一个典型的workflow如下:
  • 使用Python 训练一个模型。
  • 将模型序列化为pickle,并存到本地。
  • 使用Java命令,将pickle文件转为pmml。
2. Python 侧生成一个pickle 文件
训练部分,和直接导出pmml类似,只是最后的落地文件,不直接导出为pmml,而是存成pickle文件,代码如下:
 
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)

 

3. Java侧转换

使用上文编译好的Jar包,进行转换,命令如下:
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 文件进行操作。
两者各有优劣,请使用者根据实际情况按需使用。
 
 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM