训练好了一个Model 以后总需要保存和再次预测, 所以保存和读取我们的sklearn model也是同样重要的一步。

比如,我们根据房源样本数据训练了一下房价模型,当用户输入自己的房子后,我们就需要根据训练好的房价模型来预测用户房子的价格。

这样就需要在训练模型后把模型保存起来,在使用模型时把模型读取出来对输入的数据进行预测。

这里保存和读取模型有两种方法,都非常简单,差别在于保存和读取速度的快慢上,因为有一个是利用了多进程机制,下面我们分别来看一下。

创建模型

首先我们创建模型并训练数据:

from sklearn.datasets import load_digits
from sklearn.svm import SVC # 加载数据
digits = load_digits()
X = digits.data
y = digits.target model = SVC()
model.fit(X, y)

用pickle读写模型

pickle是python中用于数据序列化的模块,因此,对于模型的序列化也可以用此模块来进行:

import pickle
# 以写二进制的方式打开文件
file = open("D:/data/python/model.pickle", "wb")
# 把模型写入到文件中
pickle.dump(model, file)
# 关闭文件
file.close()

这样会创建D:/data/python/model.pickle的文件,大家可以自己去尝试下看看,我这边生成的文件大概1M左右。

有了模型文件之后,在进行预测时我们就不需要进行训练了,而只要把这个训练好的模型文件读取出来,然后直接进行预测就可以:

import pickle
# 以读二进制的方式打开文件
file = open("D:/data/python/model.pickle", "rb")
# 把模型从文件中读取出来
model = pickle.load(file)
# 关闭文件
file.close() # 用模型进行预测
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target print("预测值:", model.predict(X[15:20]))
print("实际值:", y[15:20])

输出为:

预测值: [5 6 7 8 9]
实际值: [5 6 7 8 9]

用joblib进行模型的读写

直接上代码:

from sklearn.datasets import load_digits
from sklearn.svm import SVC # 用模型进行训练
digits = load_digits()
X = digits.data
y = digits.target
model = SVC()
model.fit(X, y) # 用joblib保存模型
from sklearn.externals import joblib
joblib.dump(model, "D:/data/python/model.joblib")

这样就会生成D:/data/python/model.joblib文件,看起来比pickle生成的文件大一点点。

读取模型:

# 用joblib读取模型
from sklearn.externals import joblib
model = joblib.load("D:/data/python/model.joblib") # 对数据进行预测
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target print("预测值:", model.predict(X[15:20]))
print("实际值:", y[15:20])

输出为:

预测值: [5 6 7 8 9]
实际值: [5 6 7 8 9]

看起来也很简单,同pickle的区别是joblib会以多进程方式来进行,据说性能会好些。

sklearn保存模型-【老鱼学sklearn】的更多相关文章

  1. sklearn标准化-【老鱼学sklearn】

    在前面的一篇博文中关于计算房价中我们也大致提到了标准化的概念,也就是比如对于影响房价的参数中有面积和户型,面积的取值范围可以很广,它可以从0-500平米,而户型一般也就1-5. 标准化就是要把这两种参 ...

  2. sklearn数据库-【老鱼学sklearn】

    在做机器学习时需要有数据进行训练,幸好sklearn提供了很多已经标注好的数据集供我们进行训练. 本节就来看看sklearn提供了哪些可供训练的数据集. 这些数据位于datasets中,网址为:htt ...

  3. sklearn交叉验证-【老鱼学sklearn】

    交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法.于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证. 一开始 ...

  4. sklearn模型的属性与功能-【老鱼学sklearn】

    本节主要讲述模型中的各种属性及其含义. 例如上个博文中,我们有用线性回归模型来拟合房价. # 创建线性回归模型 model = LinearRegression() # 训练模型 model.fit( ...

  5. sklearn交叉验证2-【老鱼学sklearn】

    过拟合 过拟合相当于一个人只会读书,却不知如何利用知识进行变通. 相当于他把考试题目背得滚瓜烂熟,但一旦环境稍微有些变化,就死得很惨. 从图形上看,类似下图的最右图: 从数学公式上来看,这个曲线应该是 ...

  6. sklearn交叉验证3-【老鱼学sklearn】

    在上一个博文中,我们用learning_curve函数来确定应该拥有多少的训练集能够达到效果,就像一个人进行学习时需要做多少题目就能拥有较好的考试成绩了. 本次我们来看下如何调整学习中的参数,类似一个 ...

  7. tensorflow卷积神经网络-【老鱼学tensorflow】

    前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我 ...

  8. 二分类问题续 - 【老鱼学tensorflow2】

    前面我们针对电影评论编写了二分类问题的解决方案. 这里对前面的这个方案进行一些改进. 分批训练 model.fit(x_train, y_train, epochs=20, batch_size=51 ...

  9. 转sklearn保存模型

    训练好了一个Model 以后总需要保存和再次预测, 所以保存和读取我们的sklearn model也是同样重要的一步. 比如,我们根据房源样本数据训练了一下房价模型,当用户输入自己的房子后,我们就需要 ...

随机推荐

  1. less的基本使用

    众所周知,less是一门css预处理语言,其他的类似还有scss.Stylus 等,和js相似度比较高的就是less了.话不多说,我们来看less的使用. Node.js 环境中使用 Less : n ...

  2. openstack oslo.messaging库

    openstack oslo.messaging库 2017年04月13日 22:13:25 li_101357 阅读数:1383   版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  3. js身份证正则

    身份证正则 var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if (!reg.test(IDCard)) {return false;}

  4. dl,dt,dd标签的使用

    dl就是定义一个列表 dt说明白了就是这个列表的标题dd就是内容,能缩进和UL,OL性质差不多 <dl> <dt>标题标题</dt> <dd>内容内容& ...

  5. P2837 晚餐队列安排

    此题可能用动规不太好做,主要是状态转移方程很难想个人认为,思维发散的大佬们忽视. 我看了这位大佬的dp题解后才想到了方程,在此受我一膜%%% 嗯,说下思路: 先用a[i]数组存一下输入的编号: 然后用 ...

  6. 洛谷 P2042 【[NOI2005]维护数列】

    一直在想要做这道题,但是被那个硕大的Splay标签压垮了 好了,切入正题 这道题应该是我第二次用splay来维护区间问题 我还是太菜了QAQ 其实思路也很简单,就是以每一个位置的下标来进行维护,然后其 ...

  7. 《从Paxos到ZooKeeper分布式一致性原理与实践》学习笔记

    第一章 分布式架构 1.1 从集中式到分布式 集中式的特点: 部署结构简单(因为基于底层性能卓越的大型主机,不需考虑对服务多个节点的部署,也就不用考虑多个节点之间分布式协调问题) 分布式系统是一个硬件 ...

  8. 树状数组BIT

    模板1 #include<iostream> #include<cstdio> using namespace std; int n, m, c[500010]; inline ...

  9. JN_0006:MongoDB未授权访问漏洞处理

    开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作而且可以远程访问数据库. 2.[修复建议]:临时方案:配置AUTH,做好访问认证.打开 ...

  10. 【codeforces 765F】Souvenirs

    Description Artsem is on vacation and wants to buy souvenirs for his two teammates. There are n souv ...