【scikit-learn基础】--模型持久化
模型持久化(模型保存与加载)是机器学习完成的最后一步。
因为,在实际情况中,训练一个模型可能会非常耗时,如果每次需要使用模型时都要重新训练,这无疑会浪费大量的计算资源和时间。
通过将训练好的模型持久化到磁盘,我们可以在需要使用模型时直接从磁盘加载到内存,而无需重新训练。这样不仅可以节省时间,还可以提高模型的使用效率。
本篇介绍scikit-learn中几种常用的模型持久化方法。
1. 训练模型
首先,训练一个模型,这里用scikit-learn自带的手写数字数据集作为样本。
import matplotlib.pyplot as plt
from sklearn import datasets
# 加载手写数据集
data = datasets.load_digits()
# 调整数据格式
n_samples = len(data.images)
X = data.images.reshape((n_samples, -1))
y = data.target
# 用支持向量机训练模型
from sklearn.svm import SVC
# 定义
reg = SVC()
# 训练模型
reg.fit(X, y)
最后的得到的 reg 就是我们训练之后的模型,使用这个模型,就可以预测一些手写数字图片。
但是这个 reg 是代码中的一个变量,如果不能保存下来,那么,每次需要使用的时候,
还要重新执行一次上面的模型训练代码,样本数据量大的话,每次重复训练会浪费大量时间和计算资源。
所以,要将上面的 reg 模型保存下来,下次使用的时候,直接加载,不用重新训练。
2. 模型持久化
2.1. pickle 序列化
pickle格式是python中常用的序列化方式,它通过将python对象及其所拥有的层次结构转化为一个字节流来实现序列化。
将上面的模型保存到磁盘文件model.pkl中。
import pickle
with open("./model.pkl", "wb") as f:
pickle.dump(reg, f)
需要使用模型时,从磁盘加载的方式:
with open("./model.pkl", "rb") as f:
reg_pkl = pickle.load(f)
验证加载之后的模型reg_pkl是否可以正常使用。
y_pred = reg_pkl.predict(X)
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
cm = confusion_matrix(y, y_pred)
g = ConfusionMatrixDisplay(confusion_matrix=cm)
g.plot()
plt.show()

从混淆矩阵来看,模型可以正常加载和使用。
关于混淆矩阵具体内容,可以参考:【scikit-learn基础】--『分类模型评估』之评估报告
2.2. joblib 序列化
相比于pickle,保存机器学习模型时,更推荐使用joblib。
因为joblib针对大数据进行了优化,使其在处理大型数据集时性能更佳。
序列化的方式也很简单:
import joblib
joblib.dump(reg, "model.jlib")
从磁盘加载模型并验证:
reg_jlib = joblib.load("model.jlib")
y_pred = reg_jlib.predict(X)
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
cm = confusion_matrix(y, y_pred)
g = ConfusionMatrixDisplay(confusion_matrix=cm)
g.plot()
plt.show()

2.3. skops 格式
skops是比较新的一种格式,它是专门为了共享基于 scikit-learn 的模型而开发的。
目前还在积极的开发中,github上的地址是:github-skops。
相比于pickle和joblib,它提供了更加安全的序列化格式,
但使用上和它们差别不大。
import skops.io as sio
# 保存到文件 model.sio
sio.dump(reg, "model.sio")
从文件中读取模型并验证:
reg_sio = sio.load("model.sio")
y_pred = reg_jlib.predict(X)
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
cm = confusion_matrix(y, y_pred)
g = ConfusionMatrixDisplay(confusion_matrix=cm)
g.plot()
plt.show()

3. 总结
在scikit-learn中,模型持久化是一个重要且实用的技术,它允许我们将训练好的模型保存到磁盘上,以便在不同的时间点或不同的环境中重新加载和使用。
通过模型持久化,我们能够避免每次需要使用时重新训练模型,从而节省大量的时间和计算资源。
本篇介绍的三种方法可以方便的序列化和反序列化模型对象,使其可以轻松地保存到磁盘上,并能够在需要时恢复出原始模型对象。
总而言之,模型持久化不仅使得我们能够在不同的运行会话之间重用模型,还方便了模型的共享和部署。
【scikit-learn基础】--模型持久化的更多相关文章
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- tensorflow学习笔记——模型持久化的原理,将CKPT转为pb文件,使用pb模型预测
由题目就可以看出,本节内容分为三部分,第一部分就是如何将训练好的模型持久化,并学习模型持久化的原理,第二部分就是如何将CKPT转化为pb文件,第三部分就是如何使用pb模型进行预测. 一,模型持久化 为 ...
- [Tensorflow]模型持久化的原理,将CKPT转为pb文件,使用pb模型预测
文章目录 [Tensorflow]模型持久化的原理,将CKPT转为pb文件,使用pb模型预测 一.模型持久化 1.持久化代码实现 convert_variables_to_constants固化模型结 ...
- linux下bus、devices和platform的基础模型
转自:http://blog.chinaunix.net/uid-20672257-id-3147337.html 一.kobject的定义:kobject是Linux2.6引入的设备管理机制,在内核 ...
- Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)
所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...
- ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )
//TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: publ ...
- Tensorflow 模型持久化saver及加载图结构
主要内容: 1. 直接保存,加载模型; (可以指定加载,保存的var_list) 2. 加载,保存指定变量的模型 3. slim加载模型使用 4. 加载模型图结构和参数等 tensorflow 恢复部 ...
随机推荐
- python中BeautifulSoup库使用小结
转载请注明出处: BeautifulSoup是一个用于解析HTML和XML文档的Python库,它提供了一些简单但强大的API,让你可以从文档中提取数据.以下是一些BeautifulSoup的主要特性 ...
- [转帖]Linux ps -o 查看进程启动时间
https://www.cnblogs.com/apink/p/17572435.html 时间参数 如下表 参数 含义 start 显示进程启动时间的简短格式.通常,它会显示日期时间中的月-日 或 ...
- [转帖]sql server 索引阐述系列六 碎片查看与解决方案
https://www.cnblogs.com/MrHSR/p/9365720.html 一 . dm_db_index_physical_stats 重要字段说明 1.1 内部碎片:是avg_pag ...
- Linux_sqlcmd或者是Cloudquery连接SQLSERVER2012的问题解决
Linux_sqlcmd或者是Cloudquery连接SQLSERVER2012的问题解决 背景 最近想使用shell脚本给SQLServer数据库插入数据,但是发现了报错 同时进行CLoudquer ...
- [转帖]如何用python连接Linux服务器
1.安装paramiko库 pip install paramiko 2.使用paramiko库连接linux #导入库 import paramiko 创建一个sshclient对象 ssh = p ...
- [转载]Linux常用的可插拔认证模块(PAM)pam_limits.so、pam_rootok.so和pam_userdb.so的详解
Linux常用的可插拔认证模块(PAM)pam_limits.so.pam_rootok.so和pam_userdb.so的详解 https://blog.51cto.com/udb1680/1846 ...
- MySQL数据库存储varchar时多大长度会出现行迁移?
最近客户现场有人问过mysql数据库的一些参数配置的问题, 这边数据库需要将strict 严格模式关掉, 目的是为了保证数据库在插入字段时不会出现8126的长度限制错误问题. 但是一直很困惑, mys ...
- 使用Docker快速搭建InnoDB Cluster集群的过程
感谢 感谢方神的大力帮助,自己对数据库基本一窍不通.只是照葫芦画瓢做出来的. 感谢来自如下两个网站的资料,我进行了一定程度的融合. https://blog.csdn.net/weixin_43972 ...
- ggrep让多行日志-无处遁形!
相信大家都很喜欢用grep指令,查一下项目中有没有出错的,然后通过logid搜索相关出错的日志和一些关键参数,但是在多行日志的情况下就很难处理了,比如okhttp拦截器中分别打印了url,param和 ...
- 大数据面试题集锦-Hadoop面试题(五)-优化
你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案.如果你需要更多的面试经验和面试题,关注一下"张飞的猪大数据分享"吧,公众号会不定时的分享相关的知识和资料. 1. ...