背景
業務方說需要我做個web
介面,在上面輸入一條網站訪問線索的資訊,後臺通過機器學習計算這條線索的評級,例如這條線索對應的使用者購買意願有多強之類的。而機器學習對應的模型,也是業務方自己用KNIME
這個軟體訓練的,然後將訓練完的模型匯出為一個PMML
格式的檔案,我所需要做的主要工作就是匯入這個檔案,轉換成對應的機器學習模型。
注:作者去簡單嘗試了KNIME
這個軟體,感覺是個資料分析的利器。[連結]
PMML
介紹
PMML(Predictive Model Markup Language)
全稱是預測模型標記語言,既然叫做標記語言,那其實與html/XML
等也是非常類似的,只是它儲存的是機器學習模型的資訊,比如特徵名稱、型別、個數,模型種類等等。它常用於部署,例如模型在dev
環節訓練好了,將其匯出為一個PMML
檔案,然後在prod
環境中匯入即可,也很方便在不同的環境間傳遞模型,例如使用python
訓練出來的模型,用R
來呼叫和預測。
Python
匯入PMML
的問題
現在大部分語言都支援將訓練好的模型匯出為PMML
檔案,python
同樣也可以使用sklearn2pmml
這個庫來匯出模型,但我發現沒有一個很好的工具能反向操作,將已有的PMML
檔案還原成sklearn
中的機器學習模型。於是在GitHub
嘗試了一些方案,如下:
- 找到一個專案叫做jpmml-evaluator,是用
java
寫的,它支援將PMML
匯入到java
中,進入作者的倉庫中,又發現一個叫做jpmml-evaluator-python
,根據ReadMe
介紹,這是一個將jpmml-evaluator
做了簡單封裝的python
版本,使python
可以匯入PMML
檔案,但使用者較少,start
也只有1
,試用時發現了問題,也向作者反饋了,並且作者還因此更新了程式碼,但仍然沒有解決。issue
連結: https://github.com/jpmml/jpmm… - 又找了一個叫做sklearn-pmml-model,目前也是使用者少,功能不完整(支援的模型有限)的情況,但在安裝過程中就出錯,聯絡了作者,未獲得反饋。
-
openscoring專案,同樣也是一個用
java
寫的專案,其作用就是支援開啟一個服務端用於呼叫機器學習模型,客戶端向服務端傳遞機器學習的PMML
檔案和預測資料,服務端可以使用jar
包一鍵部署,而客戶端則可以使用java/python/R
等不同的SDK
,甚至直接使用curl
,最終該方案用上了。在和作者溝通中,作者還指出了KNIME
匯出的PMML
存在的BUG
,並建議向KNIME
反饋這個BUG
。