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模型。
原文出处