跨平台機器學習模型交互--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