如何保存和加载XGBoost模型(save model and load model)

XGBoost是梯度增强算法在表数据中性能最好的模型。

一旦训练完毕,将模型保存到文件中,以便以后在预测新的测试和验证数据集以及全新的数据时使用,这通常是一个很好的实践。

在本文中,您将了解如何使用标准的Python pickle API将XGBoost模型保存到文件中。

完成本教程后,您将知道:

如何使用pickle保存和稍后加载经过培训的XGBoost模型。
如何使用joblib保存和稍后加载经过培训的XGBoost模型。

用Pickle序列化XGBoost模型

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

您可以使用Python pickle API序列化您的机器学习算法,并将序列化的格式保存到文件中,例如:

# save model to file
pickle.dump(model, open("pima.pickle.dat", "wb"))

稍后,你可以加载这个文件来反序列化你的模型,并使用它做出新的预测,例如:

# load model from file
loaded_model = pickle.load(open("pima.pickle.dat", "rb"))

下面的示例演示了如何在Pima indian onset of diabetes数据集上训练XGBoost模型,将该模型保存到文件中,然后加载它进行预测。

数据下载链接 https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv

为了完整起见,下面提供了完整的代码清单。

# Train XGBoost model, save to file using pickle, load and make predictions

from numpy import loadtxt
import xgboost
import pickle
from sklearn import model_selection
from sklearn.metrics import accuracy_score

# load data
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")

# split data into X and y
X = dataset[:,0:8]
Y = dataset[:,8]

# split data into train and test sets
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, Y, test_size=test_size, random_state=seed)

# fit model no training data
model = xgboost.XGBClassifier()
model.fit(X_train, y_train)

# save model to file
pickle.dump(model, open("pima.pickle.dat", "wb"))

# some time later...

# load model from file
loaded_model = pickle.load(open("pima.pickle.dat", "rb"))

# make predictions for test data
y_pred = loaded_model.predict(X_test)
predictions = [round(value) for value in y_pred]

# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

运行此示例将您训练好的XGBoost模型保存到当前工作目录中的pima.pickle.dat pickle文件中。

pima.pickle.dat

加载模型并对训练数据集进行预测后,打印出模型的精度。

Accuracy: 77.95%

使用joblib序列化XGBoost模型

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

Joblib API提供了一些实用程序来保存和加载使用NumPy数据结构的Python对象。对于使用非常大的模型来说,这可能是一种更快的方法。

这个API看起来很像pickle API,例如,你可以保存你的训练过的模型如下:

# save model to file
joblib.dump(model, "pima.joblib.dat")

你可以稍后从文件中加载模型,并使用它做出如下预测:

# load model from file
loaded_model = joblib.load("pima.joblib.dat")

下面的示例演示了如何训练一个XGBoost模型,以便对Pima Indians人的糖尿病发病数据集进行分类,使用Joblib将该模型保存到文件中,并在稍后加载它,以便进行预测。

# Train XGBoost model, save to file using joblib, load and make predictions

from numpy import loadtxt
import xgboost
from sklearn.externals import joblib
from sklearn import model_selection
from sklearn.metrics import accuracy_score

# load data
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")

# split data into X and y
X = dataset[:,0:8]
Y = dataset[:,8]

# split data into train and test sets
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, Y, test_size=test_size, random_state=seed)

# fit model no training data
model = xgboost.XGBClassifier()
model.fit(X_train, y_train)

# save model to file
joblib.dump(model, "pima.joblib.dat")

# some time later...

# load model from file
loaded_model = joblib.load("pima.joblib.dat")

# make predictions for test data
y_pred = loaded_model.predict(X_test)
predictions = [round(value) for value in y_pred]

# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

运行该示例将模型保存为当前工作目录中的pima.joblib.dat文件,并为模型中的每个NumPy数组创建一个文件(在本例中是两个附加文件)。

pima.joblib.dat
pima.joblib.dat_01.npy
pima.joblib.dat_02.npy

加载模型后,在训练数据集上对模型进行评估,并打印预测结果的准确性。

Accuracy: 77.95%

总结

在本文中,您了解了如何序列化经过训练的XGBoost模型,并在稍后加载它们以进行预测。

具体来说,你学会了:

如何使用pickle API序列化和加载经过训练的XGBoost模型。
如何使用joblib API序列化和加载经过培训的XGBoost模型。

原文出处

猜你喜欢

转载自blog.csdn.net/liuzonghao88/article/details/88856608