【ML】机器学习模型保存方式总结

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 【ML】机器学习模型保存方式总结

1. 前言

当训练好机器学习模型后,为了方便后续的使用和部署,需要将模型进行保存。以下是机器学习模型保存的几种常见方式:

  1. 本地保存:可以使用Python的pickle或joblib等库将模型保存为文件(通常以扩展名.pkl、.dat),然后在需要使用模型的地方加载该文件。
  2. 云存储:可以将模型保存在云存储中,如Amazon S3、Google Cloud Storage等,方便在不同计算机之间传输、共享和备份模型。
  3. 数据库存储:可以将模型保存在数据库中,通常采用NoSQL数据库如MongoDB、Cassandra等,可以实现高效的数据管理和存储。
  4. 导出为API:可以使用Web框架如Flask、Django等将模型封装成API接口,以便于其他应用程序使用。
  5. 导出为服务:可以使用容器技术如Docker、Kubernetes等将模型封装为微服务,实现模型的高效部署和管理。

在选择保存方法时,需要根据具体情况和需求进行选择。无论采用何种保存方法,都需要保证保存的模型在后续使用时能够被正确加载和调用。同时,需要注意模型的大小和复杂度,以及保存的安全性和可靠性等问题。

2. 问题

作为机器学习算法工程师,我们都知道在做建模任务时,经常用到机器学习中的分类、回归等算法。那么,很多时候我们都是将重点放在模型的算法、效果上(学术界),很少有人关注当我们训练出一个模型后,如何将其保存下来,以便任何需要的时候都可以拿出来使用。今天做一个总结,分享如何保存训练好的机器学习模型(工业界)。

3. 模型

我们以波士顿房价预测为例,做一个简单的机器学习项目,包括数据加载、模型训练、模型评估、模型导出

项目使用python 3.6以上版本,sklearn 0.22.1版本,joblib 0.16.0

3.1 导库

导入依赖库,后续构建代码需要

# 导入模块
from sklearn.datasets import load_boston     
from sklearn.model_selection import train_test_split 
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error
import joblib
import pickle

3.2 数据

加载数据,我们使用的是sklearn.datasets中的波士顿房价数据集

boston = load_boston()
X = boston.data
y = boston.target

3.3 划分数据集

将数据划分为训练集和测试集

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)  # test_size=0.3表示30%数据集用来测试
print(X_train.shape)
print(X_test.shape)
print(y_train.shape)
print(y_test.shape)

3.4 定义模型

这里我们使用线性回归算法,首先需要定义模型,我们使用默认的参数,直接调库使用LinearRegression模型

# define model
model = LinearRegression()

在这里插入图片描述

3.5 训练模型

训练集上拟合模型,即进行模型训练

# train model
model.fit(X_train, y_train)

3.6 评估模型

对模型进行评估

# predict
y_pred = model.predict(X_test)
print(y_pred.shape)

# mean_squared_error
mse = mean_squared_error(y_test, y_pred)
print("mse:", mse)

# mean_absolute_error
mae = mean_absolute_error(y_test, y_pred)
print("mae:", mae)

预测结果:

在这里插入图片描述
在这里插入图片描述
mean_squared_error的值为18.5165
mean_absolute_error的值为3.2015

线性回归模型参数:

在这里插入图片描述

3.7 保存模型

上面训练好了一个线性回归模型model,将其保存

# save model
# method 1
joblib.dump(model, "save_model/ml_lr.pkl")
#joblib.dump(model, "save_model/ml_lr.dat")

# method 2
pickle.dump(model, open("save_model/ml_lr.dat", "wb"))   # open("ml_lr.dat","wb")意思是打开叫"ml_lr.dat"的文件,操作方式是写入二进制数据

保存的模型:

在这里插入图片描述

3.8 加载模型

加载保存的模型

import joblib
import pickle

# load model
model = joblib.load("save_model/ml_lr.pkl")
#model = pickle.load(open("save_model/ml_lr.dat","rb"))

3.9 其他

xgboost模型保存,可以pickle,当然它自带了save_model,详细如下

from xgboost import XGBRegressor
import xgboost as xgb

# 定义模型
model_xgb = XGBRegressor(n_estimators=50)
# 训练模型
model_xgb.fit(X_train, y_train)
# 保存模型
model_xgb.save_model("model_xgb.model")
# 加载模型
model_xgb_load = xgb.Booster(model_file="model_xgb.model")

# 需要使用xgb.DMatrix将X_test包括起来
y_pred_xgb = model_xgb_load.predict(xgb.DMatrix(X_test))

pickle.dump(model_xgb, open("model_xgb.dat", "wb"))
xgb_model = pickle.load(open("model_xgb.dat", "rb"))
y_pred_xgb = xgb_model.predict(X_test)

4. 总结

  1. 从上面可以看到,训练好的线性回归模型可以使用joblib保存为pkl后缀的模型,或者使用pickle保存dat后缀的模型。
  2. 我之前做项目的时候还使用过sklearn2pmml训练模型并导出训练好的pmml后缀模型,我会后续更新模型部署的知识,在文章中详细介绍pmml的导出和加载
  3. 通常保存的pmml文件,加载后预测结果和pkl文件预测结果对比有偏差,但偏差样本的占比在1%以内,并且偏差的预测概率值在小数点10位之后,那么是正常情况。这是因为pmml用的是64位浮点,pkl用的是32位浮点。如果偏差样本占比很大,并且偏差值相差也很大,那么就要检查一下数据和模型了的问题了
  4. 当然,还有其他模型保存方式,在此不一一赘述,涉及到深度学习模型保存方式,根据深度学习框架的不同以及部署方式、不同平台差异更大

5. 参考资料

https://www.jianshu.com/p/5d1a7548f616

https://blog.csdn.net/dchzxl/article/details/121259635

https://blog.csdn.net/LMTX069/article/details/124279643

https://www.cnblogs.com/Allen-rg/p/9477793.html

https://blog.csdn.net/LMTX069/article/details/124279643

在这里插入图片描述
扫码下方微信公众号,让我一起攻坚克难。需要手把手指导请联系AIexplore小编,让我们共同进步,一起加油。
在这里插入图片描述

相关文章
|
1天前
|
机器学习/深度学习 算法 数据可视化
机器学习模型中特征贡献度分析:预测贡献与错误贡献
本文将探讨特征重要性与特征有效性之间的关系,并引入两个关键概念:预测贡献度和错误贡献度。
15 3
|
10天前
|
机器学习/深度学习 Python
验证集的划分方法:确保机器学习模型泛化能力的关键
本文详细介绍了机器学习中验证集的作用及其划分方法。验证集主要用于评估模型性能和调整超参数,不同于仅用于最终评估的测试集。文中描述了几种常见的划分方法,包括简单划分、交叉验证、时间序列数据划分及分层抽样划分,并提供了Python示例代码。此外,还强调了在划分数据集时应注意随机性、数据分布和多次实验的重要性。合理划分验证集有助于更准确地评估模型性能并进行有效调优。
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习模型之深度神经网络的特点
深度神经网络(Deep Neural Networks, DNNs)是一类机器学习模型,通过多个层级(层)的神经元来模拟人脑的工作方式,从而实现复杂的数据处理和模式识别任务。
14 1
|
18天前
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
17天前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
111 1
|
1天前
|
机器学习/深度学习 数据采集 算法
机器学习新纪元:用Scikit-learn驾驭Python,精准模型选择全攻略!
在数据爆炸时代,机器学习成为挖掘数据价值的关键技术,而Scikit-learn作为Python中最受欢迎的机器学习库之一,凭借其丰富的算法集、简洁的API和高效性能,引领着机器学习的新纪元。本文通过一个实际案例——识别垃圾邮件,展示了如何使用Scikit-learn进行精准模型选择。从数据预处理、模型训练到交叉验证和性能比较,最后选择最优模型进行部署,详细介绍了每一步的操作方法。通过这个过程,我们不仅可以看到如何利用Scikit-learn的强大功能,还能了解到模型选择与优化的重要性。希望本文能为你的机器学习之旅提供有价值的参考。
7 0
|
19天前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
43 0
|
19天前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
31 0
|
19天前
|
前端开发 开发者 设计模式
揭秘Uno Platform状态管理之道:INotifyPropertyChanged、依赖注入、MVVM大对决,帮你找到最佳策略!
【8月更文挑战第31天】本文对比分析了 Uno Platform 中的关键状态管理策略,包括内置的 INotifyPropertyChanged、依赖注入及 MVVM 框架。INotifyPropertyChanged 方案简单易用,适合小型项目;依赖注入则更灵活,支持状态共享与持久化,适用于复杂场景;MVVM 框架通过分离视图、视图模型和模型,使状态管理更清晰,适合大型项目。开发者可根据项目需求和技术栈选择合适的状态管理方案,以实现高效管理。
28 0
|
20天前
|
机器学习/深度学习 人工智能 自动驾驶
探索AI的魔法:用Python构建你的第一个机器学习模型
【8月更文挑战第31天】在这个数字时代,人工智能(AI)已经渗透到我们生活的方方面面。从智能助手到自动驾驶汽车,AI正在改变世界。本文将带你走进AI的世界,通过Python编程语言,一步步教你如何构建第一个机器学习模型。无论你是编程新手还是有经验的开发者,这篇文章都将为你打开新世界的大门,让你体验到创造智能程序的乐趣和成就感。所以,让我们一起开始这段激动人心的旅程吧!

相关产品

  • 人工智能平台 PAI