机器学习实战 | 第五章:模型保存(持久化)

一、工具

sklearn官方给出了两种保存模型的方式:3.4. Model persistence 其中一种是pickle的方式,还有一种就是joblib包的使用.这里仅仅介绍更加简单的方便的joblib方法.

载入joblib很简单,一句话就行了.

1.from sklearn.externals import joblib

接下来就给出常用的joblib几个常用的函数的详细介绍.更多的细节可以参考:Joblib: running Python functions as pipeline jobs

存储模型(joblib.dump)

joblib.dump(value, filename, compress=0, protocol=None, cache_size=None)

作用: 持久化任意的python对象为一个文件.并且返回一个字符串列表,表示这些数据分别存放的位置. 参数: value: 待存储的Python对象 filename: 字符串或者pathlib,表示待存储的完整路径(当然包括文件名),要是使用压缩的话,下面这些扩展名的压缩 (‘.z’, ‘.gz’, ‘.bz2’, ‘.xz’ or ‘.lzma’) 会自动调用压缩方法. compress: 整形0到9或者布尔型或者一个二元元组,可选.表示压缩级别. 0或者False表示不压缩,越高的值表示越高的压缩力度,同时意味着更加慢的读取和写入.通常3是一个比较好的压缩值. 要是你是用的是bool值得True,也就认为你使用压缩,并且默认压缩级别是3. 要是你使用的是一个二元元组,那么第一个元素必须是与相应压缩方式表示的字符串, (e.g ‘zlib’, ‘gzip’, ‘bz2’, ‘lzma’ ‘xz’), 第二个就是一个0到9的整形,表示压缩级别. protocol: 正整数,表示pickle协议.可以看pickle.dump的文档了解更多细节. cache_size: 正整形,可选,已经被弃用.以后可以不理会这个参数.

读取模型(joblib.lord)

joblib.load(filename, mmap_mode=None)

作用: 重建通过joblib.dump方法持久化的对象.(可以理解为把硬盘上的对象,还原到内存里面来了.) 并且放回这个对象. 参数: filename: str or pathlib.表示存放对象文件的完整路径. mmap_mode: {None, ‘r+’, ‘r’, ‘w+’, ‘c’}, 可选. If not None, the arrays are memory-mapped from the disk. This mode has no effect for compressed files. Note that in this case the reconstructed object might not longer match exactly the originally pickled object.

二、综合例子

这里用一个利用ridge回归预测波士顿房价的例子来做模型存和取的例子.首先先上代码吧:

1.import numpy as np2.from sklearn.linear_model import Ridge3.from sklearn.externals import joblib4.from sklearn.datasets import load_boston5.6.#load data7.boston=load_boston()8.#print(boston.data.shape)9.#print(boston.target.shape)10.11.#split testSet and trainSet12.trainSet=boston.data[:400]
13.trainLabels=boston.target[:400]14.#print(trainSet.shape)15.#print(trainLabels.shape)16.17.testSet=boston.data[400:]
18.testLabels=boston.target[400:]19.20.#use model21.ridge=Ridge()22.#train23.ridge.fit(X=trainSet,y=trainLabels)24.#ridge.fit(X=boston.data[,y=boston.target)25.26.#predict27.result=ridge.predict(X=testSet)
28.print("result:\n",result)
29.print("\n\n\n")
30.print("testLabels:\n",testLabels)31.32.#save model to disk33.joblib.dump(value=ridge,filename="ridgeModel.gz",compress=True)
34.print("model has saved!!")35.36.#load model from disk37.model=joblib.load(filename="ridgeModel.gz")
38.print(type(model))
39.result2=model.predict(testSet)
40.print(result2)

结果:

代码并不是很难,毕竟只是一个作为模型存储的简单例子.

首先就是要载入必要的一些模块了,这些模块都是需要熟悉的.然后就把内置的boston房价的数据集分为两部分,训练集和测试集,为了方便之后观察结果.

后面就先把模型(ridge对象)训练一次,并且观测预测结果.

然后把这个对象存到硬盘中(持久化),我这里用了.gz压缩文件的方式来存储.然后把这个压缩文件中的对象又”恢复”到内存中并且观察了其预测值.

这就是这整个代码的过程,看完相信对于模型的保存肯定也有了一定的了解了.

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Danny的专栏

UML图——类图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

602
来自专栏PingCAP的专栏

SuRF: 一个优化的 Fast Succinct Tries

在前一篇文章中,我简单介绍了 Succinct Data Structure,这里我们继续介绍 SuRF。

2095
来自专栏QQ音乐技术团队的专栏

​关于 M4A 文件的随机访问

文章介绍了 M4A 文件的大概结构,详细解读了其中的 Sample Table Box,并结合图例,详细讲解了如何使用它来完成 M4A 文件的随机访问。

2220
来自专栏zaking's

用js来实现那些数据结构14(树02-AVL树)

1804
来自专栏机器学习原理

深度学习(2)——tensorflow可视化TensorFlow变量作用域TensorFlow可视化示例

1395
来自专栏数据结构与算法

多项式系数学习笔记

对于多项式$(x_1 + x_2 + x_3 + \dots + x_k) ^n$的展开式中$x_1^{d_1}x_2^{d_2}x_3^{d_3} \dots...

522
来自专栏小樱的经验随笔

从入门到精通之Boyer-Moore字符串搜索算法详解

本文讲述的是Boyer-Moore算法,Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解这个算法,发现这个算法一开始还挺难理解的,也许是我理解能力...

2847
来自专栏算法channel

Tensorflow|Tensor, 与Numpy比较,Constant

本教程参考stanford.edu-cs20si 01 Operations分类预览 ? 02 Tensor 1 0-d tensor, or "scala...

3697
来自专栏大数据文摘

你的数据科学python编程能力过关吗?看看这40道题你能得几分

1283
来自专栏蘑菇先生的技术笔记

算法数据结构(一)-B树

2004

扫码关注云+社区