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

一、工具

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

相关文章

来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6778
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2707
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5446
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31710
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2567
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2732
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2645
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4878
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2968

扫码关注云+社区