python模型部署初涉--PMML篇

一点点废话

最近科研立项做项目需要做机器学习的模型,模型做好了但需要在Java上部署,经过了解后,才发现原来python上训练的模型可以保存下来,而不需要每次预测都要先训练。经过一番折腾后,大致了解了模型部署的流程,再次记录,也供君参考。

为什么要部署

只有当训练和预测在不同平台时,才会涉及部署。同一个平台比如python下既训练又预测,那么只需要保存(其实也是部署,只不过使用的是模型库自身的存储方法并在python中调用,而部署常常用别的工具存储模型如PMML)下来,在需要使用时在python工程中调用即可。而当需要在其他平台比如Java上构建工程,而模型又只是工程的一部分。我们知道,python构建机器学习模型是比较方便的 ,而在Java上写机器学习模型则会非常麻烦,所以就涉及到了一个在python上训练模型并部署然后在Java上调用模型的问题。

如何部署

由于我使用sklearn库快速搭建svm模型并部署到Java上,所以我选择了PMML。PMML是一种将模型转化为XML格式的python类库。应用如下:

from sklearn2pmml.pipeline import PMMLPipeline
from sklearn2pmml import sklearn2pmml
from sklearn_pandas import DataFrameMapper
mapper = DataFrameMapper([
    (['total_num'], [ MinMaxScaler(), StandardScaler()]),
    (['left_num'],[ MinMaxScaler(), StandardScaler()]),
    ('weather', None),
    ('influence_school', None),
    ('influencr_way',None),
    ('influence_confenrence', None),
    ('influence_business', None),
    ('influence_holiday', None),
    ('influence_traffic', None),
]) #构建特征工程
heart_data = pd.read_csv("pd_data.csv")
pipeline = PMMLPipeline([ ('mapper', mapper),("classifier", svm.SVC(kernel = 'linear', probability=True))]);
pipeline.fit(heart_data[heart_data.columns.difference(["result"])], heart_data["result"])
sklearn2pmml(pipeline, ".\product.pmml", with_repr = True)

需要注意的有两点:
1.PMMLPipeline([ (‘mapper’, mapper),(“classifier”, svm.SVC(kernel = ‘linear’, probability=True))]);
这里面的mapper需要你自己去定义或者默认不写,主要是来构建特征工程。具体就是用DataFrameMapper来将Data Frame格式的数据进行预处理,比如说MinMaxScaler()归一化、StandardScaler()标准化等处理。
2.svm.SVC(kernel = ‘linear’, probability=True)处可以更改为sklearn中其他的模型

你可能感兴趣的:(2019年8月,python)