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

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 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月前
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
66 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
183 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
24天前
|
机器学习/深度学习 安全 PyTorch
FastAPI + ONNX 部署机器学习模型最佳实践
本文介绍了如何结合FastAPI和ONNX实现机器学习模型的高效部署。面对模型兼容性、性能瓶颈、服务稳定性和安全性等挑战,FastAPI与ONNX提供了高性能、易于开发维护、跨框架支持和活跃社区的优势。通过将模型转换为ONNX格式、构建FastAPI应用、进行性能优化及考虑安全性,可以简化部署流程,提升推理性能,确保服务的可靠性与安全性。最后,以手写数字识别模型为例,展示了完整的部署过程,帮助读者更好地理解和应用这些技术。
75 18
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
云上一键部署 DeepSeek-V3 模型,阿里云 PAI-Model Gallery 最佳实践
本文介绍了如何在阿里云 PAI 平台上一键部署 DeepSeek-V3 模型,通过这一过程,用户能够轻松地利用 DeepSeek-V3 模型进行实时交互和 API 推理,从而加速 AI 应用的开发和部署。
|
21天前
如何看PAI产品下训练(train)模型任务的费用细节
PAI产品下训练(train)模型任务的费用细节
56 4
|
3月前
|
人工智能 JSON 算法
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
阿里云的人工智能平台 PAI,作为一站式、 AI Native 的大模型与 AIGC 工程平台,为开发者和企业客户提供了 Qwen2.5-Coder 系列模型的全链路最佳实践。本文以Qwen2.5-Coder-32B为例,详细介绍在 PAI-QuickStart 完成 Qwen2.5-Coder 的训练、评测和快速部署。
Qwen2.5-Coder 系列模型在 PAI-QuickStart 的训练、评测、压缩及部署实践
|
2月前
|
编解码 机器人 测试技术
技术实践 | 使用 PAI+LLaMA Factory 微调 Qwen2-VL 模型快速搭建专业领域知识问答机器人
Qwen2-VL是一款具备高级图像和视频理解能力的多模态模型,支持多种语言,适用于多模态应用开发。通过PAI和LLaMA Factory框架,用户可以轻松微调Qwen2-VL模型,快速构建文旅领域的知识问答机器人。本教程详细介绍了从模型部署、微调到对话测试的全过程,帮助开发者高效实现定制化多模态应用。
|
2月前
|
机器学习/深度学习 人工智能 算法
人工智能浪潮下的编程实践:构建你的第一个机器学习模型
在人工智能的巨浪中,每个人都有机会成为弄潮儿。本文将带你一探究竟,从零基础开始,用最易懂的语言和步骤,教你如何构建属于自己的第一个机器学习模型。不需要复杂的数学公式,也不必担心编程难题,只需跟随我们的步伐,一起探索这个充满魔力的AI世界。
68 12
|
3月前
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
107 8

热门文章

最新文章

相关产品

  • 人工智能平台 PAI