北邮在线Python机器学习3:如何保存、加载训练好的机器学习模型
本文将介绍如何使用scikit-learn机器学习库保存Python机器学习模型、加载已经训练好的模型。学会了这个,你才能够用已有的模型做预测,而不需要每次都重新训练模型。
本文将使用两种方法来实现模型的保存和加载:Pickle和joblib。
本文将分为三部分,分别如下所示。第一部分讲解使用Pickle序列化、反序列化机器学习模型,第二部分讲解使用joblib保存、加载机器学习模型。第三部分讲解这个过程中常见的问题。
Pickle保存、加载机器学习模型joblib保存、加载机器学习模型常见问题小结
Pickle保存、加载机器学习模型
Pickle是Python中序列化对象的标准方法。
通常,我们会使用pickle.dump函数来序列化机器学习模型,并将序列化的二进制保存到文件中,得到最终的模型文件。
当需要重新使用这个模型时,就可以使用pickle.load函数加载此文件,反序列化模型,并使用它来进行模型预测。
下面示例演示了如何在糖尿病数据集训练LR模型,并将模型保存到文件,并加载它以对未见测试集进行预测。该代码是将模型保存到本地文件finalized_model.sav,同时加载已保存的模型,并利用其进行评估。
joblib保存、加载机器学习模型
joblib模块是机器学习库SciPy的一部分,它提供很多使Python作业pipeline的方法。
同时,它也提供了用于保存、加载NumPy数据变量、机器学习模型的方法。这对于需要保存大量训练参数、存储整个数据集的某些机器学习算法(如K近邻)非常有用。
通常,我们会使用joblib.dump函数来保存机器学习模型,并将序列化的二进制保存到文件中,得到最终的模型文件。
当需要重新使用这个模型时,就可以使用joblib.load函数加载此文件,反序列化模型,并使用它来进行模型预测。
下面的示例演示了如何在糖尿病数据集训练LR模型,并使用joblib保存模型文件,同时加载它来进行数据预测。该代码将模型保存为finalized_model.sav文件,同时加载该模型后,用于预测测试数据。
常见问题小结
在保存、加载模型时,需要注意以下常见问题:
Python版本。可以肯定的是,当加载并反序列化模型时,需要使用相同版本的Python来序列化模型。
库版本。在反序列化已保存的模型时,使用机器学习库的版本需要相同,包括NumPy版本和scikit-learn版本。
手动序列化。有时候可能需要手动输出模型的参数,以便将来可以直接在scikit-learn或其他平台中使用它们。通常,在机器学习中,用于预测的算法比用于学习参数的算法简单得多,可以很容易地在代码中实现。
当按本不同时,请重新安装对应版本进行模型加载,否则,你将遇到一些奇奇怪怪的问题。