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

一、工具

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 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

遗传算法框架GAFT优化小记

專 欄 ❈PytLab,Python 中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,...

1768
来自专栏AI科技大本营的专栏

实操 | 内存占用减少高达90%,还不用升级硬件?没错,这篇文章教你妙用Pandas轻松处理大规模数据

编译 | AI科技大本营(rgznai100) 参与 | 周翔 注:Pandas(Python Data Analysis Library) 是基于 Num...

2404
来自专栏用户2442861的专栏

轻松搞定面试中的红黑树问题

http://blog.csdn.net/silangquan/article/details/18655795

954
来自专栏腾讯技术工程官方号的专栏

后台开发中的时空转换艺术

作者介绍:augustzhang,安全平台部基础架构组员工,先后从事密保、验证码等后台研发工作,现在主要负责安全平台部大数据平台的研发工作,致力于研究每秒GB级...

1957
来自专栏灯塔大数据

每周学点大数据 | No.30前序计数

No.30期 前序计数 Mr. 王:我们再来说说父子关系判定的应用。前序计数是一种非常常用的对树进行处理的方法。前序计数实现的就是对各个节点按照其前序遍...

3307
来自专栏人工智能LeadAI

tensorflow读取数据-tfrecord格式

概述关于tensorflow读取数据,官网给出了三种方法: 1、供给数据:在tensorflow程序运行的每一步,让python代码来供给数据 2、从文件读取数...

5726
来自专栏算法channel

玩转Pandas,让数据处理更easy系列3

前面介绍了Pandas最重要的两个类:Series和DataFrame,讲述了这两种数据结构常用的属性和操作,比如values,index, columns,索...

691
来自专栏岑玉海

Spark源码系列(九)Spark SQL初体验之解析过程详解

好久没更新博客了,之前学了一些R语言和机器学习的内容,做了一些笔记,之后也会放到博客上面来给大家共享。一个月前就打算更新Spark Sql的内容了,因为一些别的...

2915
来自专栏机器之心

教程 | 简单实用的pandas技巧:如何将内存占用降低90%

选自DATAQUEST 作者:Josh Devlin 机器之心编译 参与:Panda pandas 是一个 Python 软件库,可用于数据操作和分析。数据科学...

56810
来自专栏Java面试笔试题

对继承映射的理解

继承关系的映射策略有三种: ① 每个继承结构一张表(table per class hierarchy),不管多少个子类都用一张表。 ② 每个子类一张表(t...

541

扫描关注云+社区