在数据科学领域,探索数据、预处理(可能需要创建额外的特征)以及将数据输入模型是常见的工作流程。在这种情况下,即使使用的是最简单的线性回归模型(多变量),由于所有输入特征和参数的原因,模型可能会变得非常大,反复重新训练模型将非常耗时。因此,最简单的解决方案是保存模型,以便在以后的时间进行推理或预测。虽然Keras模型API提供了保存深度学习模型的功能,但对于大多数初学者来说,在机器学习中保存模型可能会感到困惑。此外,由于估计器具有大量的参数,保存它们是非常明智的。
将使用一个房价预测数据集,该数据集具有单一特征区域(为了演示目的)。工作是预测给定区域的价格。为了保持简单,将只有4-5个数据点,将使用的模型将是线性回归模型,该模型仅适合数据集并计算所有数据点预测差异的实际差异的平方。
将快速创建模型文件,将保存以供以后使用。以下是将要保存的5个步骤。
首先,将加载所有必需的依赖项。
import pandas as pd
import numpy as np
from sklearn import linear_model
现在,将使用pd.read_csv()函数将数据加载到pandas dataframe(train_df)中,并使用df.head()方法打印前5行。
train_df = pd.read_csv('train.csv')
print(train_df.head())
创建模型对象,实际上将是一个LinearRegression分类器,然后使用训练样本和训练标签拟合模型,模型的工作是找到最佳直线拟合。
model = linear_model.LinearRegression()
model.fit(train_df[['area']], train_df.price)
正如知道的,直线有一个系数和一个截距在方程中,所以应该检查这些值,因为sklearn提供了一些方便的属性。这些可以这样检查:
model.coef_
model.intercept_
最后,为了完整性,可以测试模型预测5000平方英尺房屋的价格。
model.predict([[5000]])
现在是保存创建的模型的时候了。将查看保存模型的2个快速技巧。此外,还将提供使用哪种方法的指导。
许多人可能熟悉pickle模块,如果不是,了解pickle模块允许使用反序列化来pickle文件是很好的,这意味着简单地将对象分解为其组成组件。例如,模型文件的属性就像之前看到的那样。
要使用pickle保存文件,需要打开一个文件,在某个别名下加载它,并转储模型的所有信息。这可以使用以下代码实现:
import pickle
with open('model_pkl', 'wb') as files:
pickle.dump(model, files)
上述步骤之后,可以在目录中看到一个名为model_pkl的文件,打开它将显示如下内容:
Joblib是模型保存的替代方案,它可以在具有大量NumPy数组/数据的后端上操作,具有许多参数。它可以作为单独的模块使用(参考此处)或使用Sci-Kit Learn库。为了简单起见,将使用第二种方法。
首先,将从sklearn的外部类导入joblib。
from sklearn.externals import joblib
joblib.dump(model, 'model_jlib')