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设计的新协议。