用pickle保存机器学习模型
在机器学习中,当确定好一个模型后,我们需要将它保存下来,这样当新数据出现时,我们能够调出这个模型来对新数据进行预测。同时这些新数据将被作为历史数据保存起来,经过一段周期后,使用更新的历史数据再次训练,得到更新的模型。
如果模型的流转都在python内部,那么可以使用内置的pickle库来完成模型的存储和调取。
什么是pickle?pickle是负责将python对象序列化(serialization)和反序列化(de-serialization)的模块。pickle模块可以读入任何python对象,然后将它们转换成字符串,我们再使用dump函数将其储存到文件中,这个过程叫做pickling;反之从文件中提取原始python对象的过程叫做unpickling。
picke.dump() --- 将训练好的模型保存在磁盘上
with open(file_name, 'wb') as file:
pickle.dump(model, file)
pickle.load() --- 读取保存在磁盘上的模型
with open(file_name, 'rb') as file:
model=pickle.load(file)
以线性回归模型为例:
import numpy as np class Linear_Regression:
def __init__(self):
self._w = None def fit(self, X, y, lr=0.01, epsilon=0.01, epoch=1000):
#训练数据
#将输入的X,y转换为numpy数组
X, y = np.asarray(X, np.float32), np.asarray(y, np.float32)
#给X增加一列常数项
X=np.hstack((X,np.ones((X.shape[0],1))))
#初始化w
self._w = np.zeros((X.shape[1],1)) for _ in range(epoch):
#随机选择一组样本计算梯度
random_num=np.random.choice(len(X))
x_random=X[random_num].reshape(1,2)
y_random=y[random_num] gradient=(x_random.T)*(np.dot(x_random,self._w)-y_random) #如果收敛,那么停止迭代
if (np.abs(self._w-lr*gradient)<epsilon).all():
break
#否则,更新w
else:
self._w =self._w-lr*gradient return self._w def print_results(self):
print("参数w:{}".format(self._w))
print("回归拟合线:y={}x+{}".format(self._w[0],self._w[1])) def predict(self,x):
x=np.asarray(x, np.float32)
x=x.reshape(x.shape[0],1)
x=np.hstack((x,np.ones((x.shape[0],1))))
return np.dot(x,self._w)
训练并保存模型:
import pickle #创建数据
x=np.linspace(0,100,10).reshape(10,1)
rng=np.random.RandomState(4)
noise=rng.randint(-10,10,size=(10,1))*4
y=4*x+4+noise model=Linear_Regression()
model.fit(x,y,lr=0.0001,epsilon=0.001,epoch=20) with open('model.pickle', 'wb') as file:
pickle.dump(model, file)
然后调取模型并进行预测和打印结果:
with open('model.pickle', 'rb') as file:
model=pickle.load(file)
print(model.predict([50]))
model.print_results()
输出:
[[208.73892002]]
参数w:[[4.17372929]
[0.05245564]]
回归拟合线:y=[4.17372929]x+[0.05245564]
model是保存在磁盘上的一个python对象:
<__main__.Linear_Regression object at 0x0000009FA44B2F98>
用pickle保存机器学习模型的更多相关文章
- 使用Flask构建机器学习模型API
1. Python环境设置和Flask基础 使用"Anaconda"创建一个虚拟环境.如果你需要在Python中创建你的工作流程,并将依赖项分离出来,或者共享环境设置," ...
- (sklearn)机器学习模型的保存与加载
需求: 一直写的代码都是从加载数据,模型训练,模型预测,模型评估走出来的,但是实际业务线上咱们肯定不能每次都来训练模型,而是应该将训练好的模型保存下来 ,如果有新数据直接套用模型就行了吧?现在问题就是 ...
- scikit-learn系列之如何存储和导入机器学习模型
scikit-learn系列之如何存储和导入机器学习模型 如何存储和导入机器学习模型 找到一个准确的机器学习模型,你的项目并没有完成.本文中你将学习如何使用scikit-learn来存储和导入机器 ...
- 使用pmml实现跨平台部署机器学习模型
一.概述 对于由Python训练的机器学习模型,通常有pickle和pmml两种部署方式,pickle方式用于在python环境中的部署,pmml方式用于跨平台(如Java环境)的部署,本文叙述的 ...
- Python 3 利用机器学习模型 进行手写体数字识别
0.引言 介绍了如何生成数据,提取特征,利用sklearn的几种机器学习模型建模,进行手写体数字1-9识别. 用到的四种模型: 1. LR回归模型,Logistic Regression 2. SGD ...
- 使用ML.NET + ASP.NET Core + Docker + Azure Container Instances部署.NET机器学习模型
本文将使用ML.NET创建机器学习分类模型,通过ASP.NET Core Web API公开它,将其打包到Docker容器中,并通过Azure Container Instances将其部署到云中. ...
- tensorflow机器学习模型的跨平台上线
在用PMML实现机器学习模型的跨平台上线中,我们讨论了使用PMML文件来实现跨平台模型上线的方法,这个方法当然也适用于tensorflow生成的模型,但是由于tensorflow模型往往较大,使用无法 ...
- 用PMML实现机器学习模型的跨平台上线
在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...
- 为你的机器学习模型创建API服务
1. 什么是API 当调包侠们训练好一个模型后,下一步要做的就是与业务开发组同学们进行代码对接,以便这些‘AI大脑’们可以顺利的被使用.然而往往要面临不同编程语言的挑战,例如很常见的是调包侠们用Pyt ...
随机推荐
- zcmu 1540第k大数
1540: 第k大数Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Web Board]Description有两个序列a,b,它们的 ...
- 转:使用Goproxy解决golang.org模块无法下载的问题
原文https://studygolang.com/articles/22277?fr=sidebar 简介 Goproxy 中国完全实现了 Go 的模块代理协议.并且它是一个由中国备受信赖的云服务提 ...
- 守护线程在logback中的使用 - 论基础知识的重要性
守护线程在logback中的使用 先说问题,在java应用中,logback的异步Appender是怎么在主线程结束后,停下来的? 复盘 我在一个logback的测试用例中,写了这样的代码和logba ...
- httpd服务的配置及应用
一.httpd服务的配置文件 httpd服务的主配置文件通常为httpd根目录下的conf/httpd.conf文件,通过yum安装的httpd服务的主配置路径通常如下: httpd-2.2:/etc ...
- 【C#】 获取计算机的硬件信息
添加引用:System.Management /// <summary> /// 获取本机的MAC地址 /// </summary> /// <returns>&l ...
- vue页面跳转拦截器
登录拦截逻辑 第一步:路由拦截 首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录.如果用户已经登录,则顺利进入路由, 否则就进入登录页面.在路由管 ...
- ASUS笔记本,更换了固态硬盘,重装系统前后开机都自动进入BIOS界面
解决方法:advanced标签中sata configration回车进入,如有识别硬盘设备,按F9恢复BIOS默认设置,按F10保存后重启. 如有自行安装过系统,Security-Secure Bo ...
- js 将数字转换成中文大写
//完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五. const toChinesNum = ...
- HttpClient实战三:Spring整合HttpClient连接池
简介 在微服务架构或者REST API项目中,使用Spring管理Bean是很常见的,在项目中HttpClient使用的一种最常见方式就是:使用Spring容器XML配置方式代替Java编码方式进行H ...
- WinServer-the security database on the server does not have a computer account for
用了本地的administrator登陆