sklearn2pmml模型转化实践
在实际的项目应用中,经常会有一些需求就是平台之间模型可以比较通用地进行调用计算,在Python里面,一般搭建机器学习模型的话大都是会选用sklearn来进行的,毕竟这个项目太过于优秀了,训练出来的模型持久化在本地一般可以有几种形式:.m、.model、.h5和.pkl,但是这几种数据格式在java里面都没有办法直接方便地进行使用,这时候就需要对python输出的模型进行格式的转化,以便于其他语言平台可以进行加载使用。
这两天进行了相应的项目开发,已经走通整个流程,这里把完整流程浓缩出来一个教程项目记录一下备忘,也方便需要的朋友。
我这里使用的是常规六因子的数据,数据来源于网络采集,这里就不贴出来,以免出现审核问题,有需要的可以自行获取,数据不重要,用别的数据也都可以,在最开始学习的时候网上一大片都是用的iris或者boston数据集,我是觉得这样的内置数据集太过于简化,没办法细化整个流程,所以这里选择使用自己构建的数据集。
数据集截图如下所示:
首先是数据集加载:
def loadDataset(data="feature.json", target="pm25"):"""加载数据集"""try:with open(data) as f:feature = json.load(f)[target]except:feature = data[target]for one_list in feature[:5]:print("one_list: ", one_list)X, y = [], []for one_list in feature:X.append(one_list[:-1])y.append(one_list[-1])return X, y
之后对原始数据集进行随机划分:
def dataSplit(dataset, label, ratio=0.3):"""数据集划分"""try:X_train, X_test, y_train, y_test = train_test_split(dataset, label, test_size=ratio)except:dataset, label = np.array(dataset), np.array(label)X_train, X_test, y_train, y_test = train_test_split(dataset, label, test_size=ratio)print("--------------------------------split_data shape-----------------------------------")print(len(X_train), len(y_train))print(len(X_test), len(y_test))return X_train, X_test, y_train, y_test
得到训练集和测试集之后就可以进行模型的构建测试了。
这里我使用的是线性回归模型,可以根据自己的需求进行替换:
def linearModelTrain(X, y, ratio=0.15, resDir="models/linear/"):"""线性回归模型"""if not os.path.exists(resDir):os.makedirs(resDir)X_train, X_test, y_train, y_test = dataSplit(X, y, ratio=ratio)model = LinearRegression()model.fit(X_train, y_train)joblib.dump(model,resDir+"model.pkl")pipeline = PMMLPipeline([("regressor", model)])pipeline.fit(X_train, y_train)sklearn2pmml(pipeline, resDir+"model.pmml", with_repr = True)def mainModel(data="feature.json", ratio=0.3, modelDir="models/linear/"):"""主函数"""for i in range(len(FACTORS_LIST)):oneDir = modelDir + FACTORS_LIST[i] + "/"if not os.path.exists(oneDir):os.makedirs(oneDir)X, y = loadDataset(data=data, target=FACTORS_LIST[i])linearModelTrain(X, y, ratio=ratio, resDir=oneDir)
训练完成后,模型存储结果如下:
我同时存储了pkl格式的模型和pmml格式的模型,可以看到pmml文件会比pkl更大一些。
接下来对模型进行预测分析,对于同一条样本输入,我会分别使用pkl模型和pmml模型进行预测,最后对比分析可视化:
def pklPredict(modelDir="models/linear/", X=[1, 2, 3]):"""pkl模型预测"""model = joblib.load(modelDir + "model.pkl")y_pred = model.predict(X)print("y_pred: ", y_pred)return y_preddef pmmlPredict(modelDir="models/linear/", X=[1, 2, 3]):"""pmml模型预测"""model = Model.fromFile(modelDir + "model.pmml")y_pred = model.predict(X)print("y_pred: ", y_pred)return y_preddef test4Predict(data="data.json"):"""测试分析"""plt.clf()plt.figure(figsize=(24, 16))for i in range(len(FACTORS_LIST)):try:with open(data) as f:feature = json.load(f)[FACTORS_LIST[i]]except:feature = data[FACTORS_LIST[i]]test = random.sample(feature, 100)X, y = [], []for one_list in test:X.append(one_list[:-1])y.append(one_list[-1])pkl_pred = pklPredict(modelDir="models/" + FACTORS_LIST[i] + "/", X=X)pmml_pred = pklPredict(modelDir="models/" + FACTORS_LIST[i] + "/", X=X)plt.subplot(2, 3, i + 1)plt.plot(y, label="TrueData", color="r")plt.plot(pkl_pred, label="pkl_pred", color="g")plt.plot(pmml_pred, label="pmml_pred", color="b")R2_1 = calPerformance(y, pkl_pred)[-1]R2_2 = calPerformance(pkl_pred, pmml_pred)[-1]plt.title(FACTORS_LIST[i] + "\n" + "R2: " + str(R2_1) + ", R2: " + str(R2_2))plt.savefig("compare.png")
结果如下所示:
这里也验证了我们的猜想,之所以只能够看到红色和蓝色两条曲线,是因为pkl模型和pmml模型的预测结果是完全一样的,后者将前者盖住了,通过标题上面的R2判定系数也可以得到同样的结论。
sklearn2pmml模型转化实践相关推荐
- JavaScript 语法树与代码转化实践
JavaScript 语法树与代码转化实践 归纳于笔者的现代 JavaScript 开发:语法基础与实践技巧系列文章中.本文引用的参考资料声明于 JavaScript 学习与实践资料索引中,特别需要声 ...
- 大气污染扩散模型Calpuff实践
目前,大气污染仍为我国亟待解决的环境问题.为了弄清大气污染物排放后对周围环境的影响,需要了解污染物的扩散规律.Calpuff模型是一种三维非稳态拉格朗日扩散模型,可有效地处理非稳态(如,熏烟.环流.地 ...
- 大模型落地实践系列五、大模型怎么赚钱?
大模型落地实践系列五.大模型怎么赚钱? 在人工智能领域,随着深度学习技术的发展与进步,大模型(如GPT-3)已成为研究热点.这些模型不仅可以为各种应用场景提供强大的支持,而且还可以创造巨大的商业价值. ...
- 《数据安全能力成熟度模型》实践指南11:数据分析安全
<信息安全技术 数据安全能力成熟度模型>(GB/T 37988-2019)简称DSMM正式成为国标对外发布,并已正式实施.美创科技将以DSMM数据安全治理思路为依托,针对各过程域,基于充分 ...
- 大模型落地实践系列四、大模型研发应用的节奏?
大模型落地实践系列四.大模型研发应用的节奏? 近年来,随着计算机硬件性能的提高和机器学习算法的不断优化,大模型已经成为了当今人工智能领域最热门的话题之一.在实际应用中,大模型可以帮助我们更好地完成诸如 ...
- mongodb线程池_常用高并发网络线程模型设计及MongoDB线程模型优化实践
服务端通常需要支持高并发业务访问,如何设计优秀的服务端网络IO工作线程/进程模型对业务的高并发访问需求起着至关重要的核心作用. 本文总结了了不同场景下的多种网络IO线程/进程模型,并给出了各种模型的优 ...
- agc013e Placing Squares(模型转化+dp+矩阵优化)
题目链接:agc013e Placing Squares 题目大意: 给你一个正整数序列S,长度为m,还有一个正整数n,S中元素升序且都小于n(1≤X1<X2<...<Xm≤n−1) ...
- Data Vault初探(十) —— 星型模型向Data Vault模型转化
源数据库模型(3NF)如下图: 星型模型如下图: Data Vault模型如下图: 说明: 星型模型(star schema)的事实表采取了完全规范化的第三范式(3NF)模型,而维表采取了第二范式的设 ...
- R+VIC模型融合实践技术应用及未来气候变化模型预测/SWAT/HSPF/HEC-HMS
在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用.目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等.虽然,这些软 ...
- 朴素贝叶斯模型应用实践
实验四:朴素贝叶斯模型应用实践 一.实验目的 1.了解贝叶斯原理: 2.理解朴素贝叶斯算法原理: 3.掌握朴素贝叶斯工作流程 4.初步应用朴素贝叶斯分类器在分类中应用: 二. 实验内容 (以下实验二选 ...
最新文章
- Linux驱动修炼之道-RTC子系统框架与源码分析【转】
- 基于stm32f103zet6的DS1302学习
- 重磅!深度学习圣经“花书”核心笔记、代码发布
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第七天(非原创)
- python time模块详解_py 模块之 time模块 讲解②
- 莫桑比克wcdma频段_开放医疗记录社区支持莫桑比克的新系统
- 在一个行业做,一定要打造自己的品牌IP
- 虚拟机中PXE-MOF:Exiting intel PXE ROM.Operating system not found解决方法
- Ivy Bridge处理器
- 自定义httpSession
- 高数_证明_弧微分公式
- 卸载windows激活码
- 怎么用图片编辑器给证件照换底色
- EPLAN2022程序安装及注意事项
- Android Studio连接海马玩模拟器
- 互联网日报 | 6月8日 星期二 | 华为30亿成立数字能源公司;阿里明星直播业务“天猫星选”上线;苹果WWDC 2021开幕...
- 学编程c语言高考能加分吗,编程已列入中高考,孩子升学加分的机会能否抓住?...
- 8.openCV 裁剪图像
- 小型直播系统系列-乐聊TV的开发(二)
- android充当server服务器