Machine Learning——模型的保存和加载(sklearn)、pkl文件介绍

sklearn中模型保存和加载的模块: joblib

在机器学习的过程中,我们会进行模型的训练,最常用的就是sklearn中的库,而对于训练好的模型,我们当然是要进行保存的,不然下次需要进行预测的时候就需要重新再进行训练。如果数据量小的话,那再重新进行训练是没有问题的,但是如果数据量大的话,再重新进行训练可能会花费很多开销,这个时候,保存好已经训练的模型就显得特别重要了。我们可以使用sklearn中的joblib模块进行保存与加载

一、模型保存

joblib.dump(estimator,'test.pkl')

#岭回归进行房价预测
rd = Ridge(alpha=1.0)
rd.fit(x_train, y_train)
print("权重值:", rd.coef_)

#模型保存
joblib.dump(rd, './tmp/test.pkl')

二、模型加载

estimator = joblib.load('test.pkl')   注意文件格式:pkl(二进制文件)

#estimator预测
#岭回归进行房价预测
# rd = Ridge(alpha=1.0)
# rd.fit(x_train, y_train)
# print("权重值:", rd.coef_)

#使用模型文件进行房价预测
rd = joblib.load('./tmp/test.pkl') #等价于上方训练出来的模型

三、pkl文件介绍

pkl文件是python里面保存文件的一种格式,如果直接打开会显示一堆序列化的东西。正确的操作方式是使用Pickle模块。Pickle模块将任意一个Python对象转换成一系统字节,这个操作过程叫做串行化对象。

pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。 “Pickling”是将Python对象层次结构转换为字节流的过程, “unpickling”是反向操作,从而将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构。pickle模块对于错误或恶意构造的数据是不安全的。

pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上。

pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化,

pickle序列化后的数据,可读性差,人一般无法识别。


pickle.dump(obj, file[, protocol])
  序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。protocol的值还可以是1或2,表示以二进制的形式序列化。

pickle.load(file)
  反序列化对象。将文件中的数据解析为一个Python对象。


pickle模块提供以下常量:

pickle.HIGHEST_PROTOCOL

整数, 可用的最高协议版本。这个值可以作为一个被传递协议的价值函数 dump()dumps()以及该Pickler 构造函数。

pickle.DEFAULT_PROTOCOL

整数,用于编码的默认协议版本。可能不到HIGHEST_PROTOCOL。目前,默认协议是3,这是为Python 3设计的新协议。

 

你可能感兴趣的:(机器学习&深度学习)