Python之pypmml:pypmml的简介、安装、使用方法之详细攻略
Python之pypmml:pypmml的簡介、安裝、使用方法之詳細攻略
?
?
目錄
pypmml的簡介
1、PMML優點
2、PMML的缺點
pypmml的安裝
pypmml的使用方法
1、基礎案例
2、利用XGBoost模型對Iris數據訓練并轉為PMML文件,載入并實現預測
?
?
pypmml的簡介
? ? ? ?pypmml是一個python pmml評分庫,它實際上是用于PMML4S的python api。pmml經常是跨平臺給java調用,借用PMML模型進行上線測試,即采用Python語言做模型訓練,線上采用 Java 載入模型做預測。離線部分負責模型訓練和導出模型,線上導入模型并且做預測。當然特征工程部分主要做特征變換,例如 分桶,單值編碼,歸一化等。
? ? ? ?預測模型標記語言PMML(Predictive Model Markup Language)是一套與平臺和環境無關的模型表示語言,是目前表示機器學習模型的實際標準。PMML是一種可以呈現預測分析模型的事實標準語言。標準東西的好處就是,各種開發語言都可以使用相應的包,把模型文件轉成這種中間格式,而另外一種開發語言,可以使用相應的包導入該文件做線上預測。
? ? ? ? ?從2001年發布的PMML1.1,到2019年最新4.4,PMML標準已經由最初的6個模型擴展到了17個模型,并且提供了挖掘模型(Mining Model)來組合多模型。作為一個開放的成熟標準,PMML由數據挖掘組織DMG(Data Mining Group)開發和維護,經過十幾年的發展,得到了廣泛的應用,有超過30家廠商和開源項目(包括SAS,IBM SPSS,KNIME,RapidMiner等主流廠商)在它們的數據挖掘分析產品中支持并應用PMML,
? ? ? ?PMML是一套基于XML的標準,通過 XML Schema 定義了使用的元素和屬性,主要由以下核心部分組成:
- 數據字典(Data Dictionary),描述輸入數據。
- 數據轉換(Transformation Dictionary和Local Transformations),應用在輸入數據字段上生成新的派生字段。
- 模型定義 (Model),每種模型類型有自己的定義。
- 輸出(Output),指定模型輸出結果。
?
1、PMML優點
- 平臺無關性。PMML可以讓模型部署環境脫離開發環境,實現跨平臺部署,是PMML區別于其他模型部署方法最大的優點。比如使用Python建立的模型,導出PMML后可以部署在Java生產環境中。
- 互操作性。這就是標準協議的最大優勢,實現了兼容PMML的預測程序可以讀取其他應用導出的標準PMML模型。
- 廣泛支持性。已取得30余家廠商和開源項目的支持,通過已有的多個開源庫,很多重量級流行的開源數據挖掘模型都可以轉換成PMML。
- 可讀性。PMML模型是一個基于XML的文本文件,使用任意的文本編輯器就可以打開并查看文件內容,比二進制序列化文件更安全可靠。
?
2、PMML的缺點
- 數據處理操作有限。支持不了所有的數據預處理和后處理操作。雖然PMML已經支持了幾乎所有的標準數據處理方式,但是對用戶一些自定義操作,還缺乏有效的支持,很難放到PMML中。
- 模型類型支持有限。特別是缺乏對深度學習模型的支持,PMML下一版5.0會添加對深度模型的支持,目前Nyoka可以支持Keras等深度模型,但生成的是擴展的PMML模型。
- PMML是一個松散的規范標準,有的廠商生成的PMML有可能不太符合標準定義的Schema,并且PMML規范允許廠商添加自己的擴展,這些都對使用這些模型造成了一定障礙。
?
?
參考文章:https://zhuanlan.zhihu.com/p/79197337
?
pypmml的安裝
pip install pypmml
pip install --user -i https://pypi.tuna.tsinghua.edu.cn/simple pypmml
?
?
?
?
pypmml的使用方法
1、基礎案例
heart_data = pandas.read_csv("heart.csv") #用Mapper定義特征工程 mapper = DataFrameMapper([(['sbp'], MinMaxScaler()),(['tobacco'], MinMaxScaler()),('ldl', None),('adiposity', None),(['famhist'], LabelBinarizer()),('typea', None),('obesity', None),('alcohol', None),(['age'], FunctionTransformer(np.log)), ]) #用pipeline定義使用的模型,特征工程等 pipeline = PMMLPipeline([('mapper', mapper),("classifier", linear_model.LinearRegression()) ])pipeline.fit(heart_data[heart_data.columns.difference(["chd"])], heart_data["chd"]) #導出模型文件 sklearn2pmml(pipeline, "lrHeart.xml", with_repr = True)?
?
2、利用XGBoost模型對Iris數據訓練并轉為PMML文件,載入并實現預測
from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler import pandas as pd from xgboost import XGBClassifierseed = 123iris = datasets.load_iris() target = 'Species' features = iris.feature_names iris_df = pd.DataFrame(iris.data, columns=features) iris_df[target] = iris.targetX, y = iris_df[features], iris_df[target] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=seed)pipeline = Pipeline([('scaling', StandardScaler()), ('xgb', XGBClassifier(n_estimators=5, seed=seed)) ])pipeline.fit(X_train, y_train) y_pred = pipeline.predict(X_test) y_pred_proba = pipeline.predict_proba(X_test)from nyoka import xgboost_to_pmml xgboost_to_pmml(pipeline, features, target, "xgb-iris.pmml")from pypmml import Model model = Model.load("xgb-iris.pmml") model.predict(X_test)?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Python之pypmml:pypmml的简介、安装、使用方法之详细攻略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之sklearn:GridS
- 下一篇: Python之sklearn-pmml: