Machine Learning X g boost

XGBoost - Bài 7: Lưu và sử dụng XGBoost model

XGBoost - Bài 7: Lưu và sử dụng XGBoost model

Giả sử bạn đã train xong một XGBoost model đạt được độ chính xác rất cao. Câu hỏi đặt ra là làm sao lưu lại model đó để sử dụng về sau (không phải mất công train lại model mỗi khi cần sử dụng)?

Trong bài viết này, chúng ta hãy cùng tìm hiểu cách thức lưu một XGBoost model thành 1 file sử dụng Python pickle API. Nội dung bài viết gồm 2 phần chính:

  • Lưu và sử dụng XGBoost model bằng thư viện pickle.
  • Lưu và sử dụng XGBoost model bằng thư viện joblib.

1. Lưu và sử dụng XGBoost model bằng thư viện pickle.

Pickle là một cách chuẩn chỉ để lưu một dối tượng trong Python thành một file. Cách sử dụng tương đối đơn giản.

  • Lưu model thành file
# save model to file
pickle.dump(model, open("pima.pickle.dat", "wb"))
  • Gọi model đã lưu để sử dụng
# load model from file
loaded_model = pickle.load(open("pima.pickle.dat", "rb"))

Ví dụ dưới đây mình họa việc train một XGBoost model trên tập dữ liệu Pima Indians onset of diabetes, lưu model thành file và gọi model đã lưu để dự đoán.

# Train XGBoost model, save to file using pickle, load and make predictions
from numpy import loadtxt
from XGBoost import XGBClassifier
import pickle
from sklearn.model_selection import train_test_split
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 = train_test_split(X, Y, test_size=test_size, random_state=seed)
# fit model on training data
model = XGBClassifier()
model.fit(X_train, y_train)
# save model to file
pickle.dump(model, open("pima.pickle.dat", "wb"))
print("Saved model to: pima.pickle.dat")
# some time later...
# load model from file
loaded_model = pickle.load(open("pima.pickle.dat", "rb"))
print("Loaded model from: pima.pickle.dat")
# make predictions for test data
predictions = loaded_model.predict(X_test)
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

Kết quả:

Saved model to: pima.pickle.dat
Loaded model from: pima.pickle.dat
Accuracy: 74.02%

2. Lưu và sử dụng XGBoost model bằng thư viện joblib.

Joblib là một phần của hệ sinh thái SciPy, nó cũng hỗ trợ việc lưu ML model thành file rât dễ dàng, sử dụng cấu trúc dữ liệu của NumPy. Ưu điểm của viêc sử dụng joblib so với pickle là nó hoạt động khá nhanh, đặc biệt với những model có kích thước lớn. Cách sử dụng:

  • Lưu model thành file
# save model to file
joblib.dump(model, "pima.joblib.dat")
  • Sử dụng model đã lưu
# load model from file
loaded_model = joblib.load("pima.joblib.dat")

Ví dụ dưới đây mình họa việc train một XGBoost model trên tập dữ liệu Pima Indians onset of diabetes, lưu model thành file và gọi model đã lưu để dự đoán.

# Train XGBoost model, save to file using joblib, load and make predictions
from numpy import loadtxt
from XGBoost import XGBClassifier
from joblib import dump
from joblib import load
from sklearn.model_selection import train_test_split
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 = train_test_split(X, Y, test_size=test_size, random_state=seed)
# fit model on training data
model = XGBClassifier()
model.fit(X_train, y_train)
# save model to file
dump(model, "pima.joblib.dat")
print("Saved model to: pima.joblib.dat")
# some time later...
# load model from file
loaded_model = load("pima.joblib.dat")
print("Loaded model from: pima.joblib.dat")
# make predictions for test data
predictions = loaded_model.predict(X_test)
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

Output của đoạn code trên:

Saved model to: pima.joblib.dat
Loaded model from: pima.joblib.dat
Accuracy: 74.02%

3. Kết luận

Trong bài viết này, chúng ta đã tìm hiểu cách thức lưu XGBoost model thành file sử dụng picklejoblib, sau đó gọi lại model đã lưu từ file để dự đoán.

Bài viết tiếp theo sẽ tìm hiểu cách tính toán và lựa chọn các features tốt nhất cho việc train XGBoost model.

Toàn bộ source code của bài này các bạn có thể tham khảo trên github cá nhân của mình tại github.

Bài viết có tham khảo tại tham khảo.