在实际的项目应用中,经常会有一些需求就是平台之间模型可以比较通用地进行调用计算,在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模型转化实践相关推荐

  1. JavaScript 语法树与代码转化实践

    JavaScript 语法树与代码转化实践 归纳于笔者的现代 JavaScript 开发:语法基础与实践技巧系列文章中.本文引用的参考资料声明于 JavaScript 学习与实践资料索引中,特别需要声 ...

  2. 大气污染扩散模型Calpuff实践

    目前,大气污染仍为我国亟待解决的环境问题.为了弄清大气污染物排放后对周围环境的影响,需要了解污染物的扩散规律.Calpuff模型是一种三维非稳态拉格朗日扩散模型,可有效地处理非稳态(如,熏烟.环流.地 ...

  3. 大模型落地实践系列五、大模型怎么赚钱?

    大模型落地实践系列五.大模型怎么赚钱? 在人工智能领域,随着深度学习技术的发展与进步,大模型(如GPT-3)已成为研究热点.这些模型不仅可以为各种应用场景提供强大的支持,而且还可以创造巨大的商业价值. ...

  4. 《数据安全能力成熟度模型》实践指南11:数据分析安全

    <信息安全技术 数据安全能力成熟度模型>(GB/T 37988-2019)简称DSMM正式成为国标对外发布,并已正式实施.美创科技将以DSMM数据安全治理思路为依托,针对各过程域,基于充分 ...

  5. 大模型落地实践系列四、大模型研发应用的节奏?

    大模型落地实践系列四.大模型研发应用的节奏? 近年来,随着计算机硬件性能的提高和机器学习算法的不断优化,大模型已经成为了当今人工智能领域最热门的话题之一.在实际应用中,大模型可以帮助我们更好地完成诸如 ...

  6. mongodb线程池_常用高并发网络线程模型设计及MongoDB线程模型优化实践

    服务端通常需要支持高并发业务访问,如何设计优秀的服务端网络IO工作线程/进程模型对业务的高并发访问需求起着至关重要的核心作用. 本文总结了了不同场景下的多种网络IO线程/进程模型,并给出了各种模型的优 ...

  7. agc013e Placing Squares(模型转化+dp+矩阵优化)

    题目链接:agc013e Placing Squares 题目大意: 给你一个正整数序列S,长度为m,还有一个正整数n,S中元素升序且都小于n(1≤X1<X2<...<Xm≤n−1) ...

  8. Data Vault初探(十) —— 星型模型向Data Vault模型转化

    源数据库模型(3NF)如下图: 星型模型如下图: Data Vault模型如下图: 说明: 星型模型(star schema)的事实表采取了完全规范化的第三范式(3NF)模型,而维表采取了第二范式的设 ...

  9. R+VIC模型融合实践技术应用及未来气候变化模型预测/SWAT/HSPF/HEC-HMS

    在气候变化问题日益严重的今天,水文模型在防洪规划,未来预测等方面发挥着不可替代的重要作用.目前,无论是工程实践或是科学研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等.虽然,这些软 ...

  10. 朴素贝叶斯模型应用实践

    实验四:朴素贝叶斯模型应用实践 一.实验目的 1.了解贝叶斯原理: 2.理解朴素贝叶斯算法原理: 3.掌握朴素贝叶斯工作流程 4.初步应用朴素贝叶斯分类器在分类中应用: 二. 实验内容 (以下实验二选 ...

最新文章

  1. Linux驱动修炼之道-RTC子系统框架与源码分析【转】
  2. 基于stm32f103zet6的DS1302学习
  3. 重磅!深度学习圣经“花书”核心笔记、代码发布
  4. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第七天(非原创)
  5. python time模块详解_py 模块之 time模块 讲解②
  6. 莫桑比克wcdma频段_开放医疗记录社区支持莫桑比克的新系统
  7. 在一个行业做,一定要打造自己的品牌IP
  8. 虚拟机中PXE-MOF:Exiting intel PXE ROM.Operating system not found解决方法
  9. Ivy Bridge处理器
  10. 自定义httpSession
  11. 高数_证明_弧微分公式
  12. 卸载windows激活码
  13. 怎么用图片编辑器给证件照换底色
  14. EPLAN2022程序安装及注意事项
  15. Android Studio连接海马玩模拟器
  16. 互联网日报 | 6月8日 星期二 | 华为30亿成立数字能源公司;阿里明星直播业务“天猫星选”上线;苹果WWDC 2021开幕...
  17. 学编程c语言高考能加分吗,编程已列入中高考,孩子升学加分的机会能否抓住?...
  18. 8.openCV 裁剪图像
  19. 小型直播系统系列-乐聊TV的开发(二)
  20. android充当server服务器

热门文章

  1. ubuntu 18.04 解决无法联网的问题
  2. 微信扫码访问网站调用默认浏览器打开如何实现?
  3. EF中CodeFirst中实体变化的处理方式
  4. 【原创】Linux下追加磁盘空间的方法
  5. ccflow 驰骋工作流引擎的共享任务,应用背景,设置,设计,sdk接口
  6. VDI成长之路:Windows桌面优化配置(持续更新-20120227)
  7. 保持皮肤水嫩有光泽,让皮肤保湿的土办法 - 生活至上,美容至尚!
  8. 对MYSQL进行压力测试
  9. 列表查询组件代码, 简化拼接条件SQL语句的麻烦
  10. spring-session实现分布式集群session的共享(转)