問題導讀 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 文件進行操作。 兩者各有優劣,請使用者根據實際情況按需使用。 |