机器学习实战 | 第五章:模型保存(持久化)
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("nnn")
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压缩文件的方式来存储.然后把这个压缩文件中的对象又”恢复”到内存中并且观察了其预测值.
这就是这整个代码的过程,看完相信对于模型的保存肯定也有了一定的了解了.
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 2019 ICPC 南京网络赛 F Greedy Sequence
- 补题Codeforces 1102E. Monotonic Renumeration
- 2019 ICPC 南京网络赛 H-Holy Grail
- 写代码?程序猿?你不能不懂的八大排序算法的Python实现
- Java开发编程规范:5.集合处理
- codeforce 272E Dima and Horses (假DFS)
- 网速慢?NO可能是路由器的原因?
- codeforce 272B Dima and Sequence
- 微软自家的.Net下的JavaScript引擎--- ClearScript
- HDU 1159.Common Subsequence【动态规划DP】
- Codeforce 270D Greenhouse Effect
- 地表最简单安装MySQL及配置的方法,没有之一
- HDOJ 1176 免费馅饼 -- 动态规划
- flex-grow计算公式
- Cypress系列(67)- 环境变量设置指南