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

找到一个准确的机器学习模型并不是该项目的结束。

在这篇文章中,你将了解如何使用scikit-learn在Python中保存和加载你的机器学习模型。

这使你可以将模型保存到文件中,并在以后加载,以便进行预测。

我们开始吧。

用pickle完成你的模型

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

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

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

下面的例子展示了如何在Pima Indians onset of diabetes数据集上训练Logistic回归模型,将模型保存到文件并加载,以便对未见的测试集进行预测(从此处下载)。

# 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.sav'
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.sav。加载保存的模型,并对其进行评估,用未知数据评估模型的准确率。

0.755905511811

使用joblib完成你的模型

Joblib是SciPy生态系统的一部分,为管道化python的工作提供的工具。

它提供了存储和导入python对象的工具,可以对Numpy数据结构进行有效的利用。

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

下面的示例演示了如何在Pima Indians onset of diabetes数据集上训练Logistic回归模型,使用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.sav'
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.sav文件,并为模型中的每个NumPy数组创建一个文件(另外四个文件)。加载模型后,将报告对未知数据的模型精度的评估。

0.755905511811

关于最终确定模型的提示

本节列出了最终确定机器学习模型时的一些重要注意事项。

  • Python版本。请注意python版本。几乎可以肯定的是,当你稍后加载和反序列化模型时,需要的Python的主要(可能是次要)版本与用于序列化模型的版本相同。
  • 库版本。在反序列化保存的模型时,几乎可以肯定的是,机器学习项目中使用的所有主要库的版本都需要相同。这并不局限于NumPy版本和SCRICKIT-LEARN版本。
  • 手动序列化。你可能希望手动输出学习模型的参数,以便将来可以在SCRKIT-LEARN或其他平台中直接使用它们。通常,机器学习算法用来进行预测的算法比用来学习参数的算法简单得多,在你可以控制的自定义代码中可能很容易实现。

请注意版本,以便以后由于某种原因无法在另一台计算机或另一平台上重新加载模型时,可以重新创建环境。

摘要

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

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

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

00

Python

发表评论

电子邮件地址不会被公开。 必填项已用*标注

什么阻碍了你实现迈入机器学习领域的目标?

什么阻碍了你实现迈入机器学习领域的目标?

2020-04-22 机器学习

如果你在为进入机器学习领域而挣扎,感觉到有什么东西阻止了自己的开始,那么你应该看看这篇文章。 在这篇文章中,我们会讨论阻止进入机器学习领域的自我限制的信念,让你明白面临的问题。 几乎总是一种自我限制的信念阻碍了你们的进步。 也许你会在一个或多个这样的信念中看到自己。如果是这样的话, [......]

了解详情

R语言机器学习迷你课程

R语言机器学习迷你课程

2020-08-12 机器学习

在这个迷你课程中,你将发现如何开始,构建精确的模型,并自信地完成在14天内使用R预测建模机器学习项目。 这是一个重要而重要的文章。你可能想把它书签。 了解如何准备数据,拟合机器学习模型,并用我的新书评估他们在r上的预测,包括14步教程、3个项目和完整源代码。 我们开始吧。 [......]

了解详情

关于机器学习的几点思考

关于机器学习的几点思考

2020-04-26 机器学习

机器学习是一个大的、跨学科的研究领域。 你可以通过机器学习获得令人印象深刻的结果,并找到非常具有挑战性的问题的解决方案。但这只是更广泛的机器学习领域的一小部分,通常被称为预测建模或预测分析。 在这篇文章中,你将发现如何改变你对机器学习的思考方式,以便更好地为你提供机器学习实践者的服务。 [......]

了解详情

找到你的机器学习部落

找到你的机器学习部落

2020-04-26 机器学习

机器学习是一个充满算法和数据的迷人而强大的研究领域。 问题是,有这么多不同类型的人对机器学习感兴趣,每个人都有不同的需求。重要的是要了解你想要从机器学习中得到什么,并根据这些需求调整你的自学。 如果你不这样做,你很容易就会陷入困境,迷失方向,失去兴趣,得不到你想要的东西。 找到 [......]

了解详情

应用机器学习过程

应用机器学习过程

2020-04-26 机器学习

随着时间的推移,在处理应用机器学习问题时,你会开发出一种模式或流程,以快速获得良好的正常结果。 一旦开发完成,你就可以在一个又一个项目上反复使用此过程。你的流程越健壮、越发达,你就能越快地获得可靠的结果。 在这篇文章中,我想与你分享我解决机器学习问题的过程框架。 你可以将其用作下一 [......]

了解详情