sklearn存储机器学习模型

需求

有时候需要训练的是一个能够在多处被复用的模型,而不是一次简单的从训练到使用的实验,这时就需要将训练好的模型存储下来。

方法

有两种方法可以实现模型的存储:1)Pickle;2)joblib

pickle

pickle是python中一种标准的序列化对象方法,可以使用pickle操作来序列化机器学习算法,保存这种序列化的格式奥一个文件中。

可以导入这个文件反序列化模型,得以再次使用模型。

下例训练了一个逻辑回归模型,然后使用pickle将模型保存,读取模型后对位置数据做了预测。

import pandas
import pickle
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values

X = array[:,0:8]
Y = array[:,8]
test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)

model = LogisticRegression()
model.fit(X_train, Y_train)

# 存储模型
filename = 'finalized_model.sav'
pickle.dump(model, open(filename, 'wb'))

# 读取模型
loaded_model = pickle.load(open(filename, 'rb'))
result = loaded_model.score(X_test, Y_test)
print(result)

jiblib

joblib是SciPy生态的一部分,为管道化python的工具提供的工具。它提供了存储和导入python对象的工具,可以对Numpy数据结构进行有效的利用。这对于要求很多参数和存储整个数据集的算法很有帮助。

下例训练一个逻辑回归模型,使用joblib将其保存,再导入模型对数据进行预测。

import pandas
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.externals import joblib

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = pandas.read_csv(url, names=names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
test_size = 0.33
seed = 7
X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, test_size=test_size, random_state=seed)

model = LogisticRegression()
model.fit(X_train, Y_train)

# 存储模型
filename = 'finalized_model.sav'
joblib.dump(model, filename)

# 读取模型
loaded_model = joblib.load(filename)
result = loaded_model.score(X_test, Y_test)
print(result)

提醒

  1. python的版本:需要相同的版本号来序列化和反序列化模型
  2. 库的版本:需要保持一致

猜你喜欢

转载自blog.csdn.net/AG9GgG/article/details/87713243