如何使用 scikit-learn 在Python 中保存和加载机器学习模型

2021年9月24日23:17:31 发表评论 86 views

一、教程概述

本教程分为3部分,它们是:

  • 1、用pickle保存你的模型
  • 2、使用 joblib 保存您的模型
  • 3、保存模型的提示

二、用pickle保存模型

Pickle 是 Python 中序列化对象的标准方法。

您可以使用 pickle 操作序列化您的机器学习算法并将序列化格式保存到文件中。

稍后您可以加载此文件以反序列化您的模型并使用它进行新的预测。

下面的示例演示了如何在皮马印第安人的糖尿病数据集上训练逻辑回归模型,将模型保存到文件并加载它以对看不见的测试集进行预测(从这里下载)。

# Save Model Using Pickle
import pandas
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
import pickle
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
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)
# Fit the model on training set
model = LogisticRegression()
model.fit(X_train, Y_train)
# save the model to disk
filename = 'finalized_model.pkl'
pickle.dump(model, open(filename, 'wb'))

# some time later...

# load the model from disk
loaded_model = pickle.load(open(filename, 'rb'))
result = loaded_model.score(X_test, Y_test)
print(result)

运行示例会将模型保存到本地工作目录中的 finalized_model.pkl

加载保存的模型并对其进行评估,以估计模型对未见数据的准确性。

0.755905511811

三、用joblib保存模型

Joblib 是 SciPy 生态系统的一部分,提供用于流水线化 Python 作业的实用程序。

它提供了用于保存和加载 Python 对象的实用程序,这些对象有效地使用了 NumPy 数据结构。

这对于一些需要大量参数或存储整个数据集的机器学习算法(如 K-Nearest Neighbors)很有用。

下面的示例演示了如何在皮马印第安人糖尿病数据集上训练逻辑回归模型,使用 joblib 将模型保存到文件并加载它以对看不见的测试集进行预测。

# Save Model Using joblib
import pandas
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
import joblib
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
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)
# Fit the model on training set
model = LogisticRegression()
model.fit(X_train, Y_train)
# save the model to disk
filename = 'finalized_model.pkl'
joblib.dump(model, filename)

# some time later...

# load the model from disk
loaded_model = joblib.load(filename)
result = loaded_model.score(X_test, Y_test)
print(result)

运行该示例会将模型保存为 finalized_model.pkl 文件,并为模型中的每个 NumPy 数组创建一个文件(四个附加文件)。
加载模型后,将报告模型对未见数据的准确性的估计。

0.755905511811

总结

在这篇文章中,您了解了如何使用 scikit-learn 在 Python 中持久化您的机器学习算法。

您学习了两种可以使用的技术:

  • 用于序列化标准 Python 对象的 pickle API。
  • 用于使用 NumPy 数组高效序列化 Python 对象的 joblib API。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: