XGBoost
Entrenamiento y guardado de un modelo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import pandas as pd import xgboost as xgb from sklearn.model_selection import train_test_split # Prepare training data and setting parameters iris = pd.read_csv('/home/ma-user/work/iris.csv') X = iris.drop(['variety'],axis=1) y = iris[['variety']] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234565) params = { 'booster': 'gbtree', 'objective': 'multi:softmax', 'num_class': 3, 'gamma': 0.1, 'max_depth': 6, 'lambda': 2, 'subsample': 0.7, 'colsample_bytree': 0.7, 'min_child_weight': 3, 'silent': 1, 'eta': 0.1, 'seed': 1000, 'nthread': 4, } plst = params.items() dtrain = xgb.DMatrix(X_train, y_train) num_rounds = 500 model = xgb.train(plst, dtrain, num_rounds) model.save_model('/tmp/xgboost.m') |
Antes del entrenamiento, descarga el conjunto de datos iris.csv, descomprimelo y súbelo al directorio /home/ma-user/work/ de la instancia del cuaderno. Descargue el conjunto de datos iris.csv desde https://gist.github.com/netj/8836201. Para obtener más información sobre cómo cargar un archivo en una instancia de notebook, consulte Escenarios de carga y entradas.
Después de guardar el modelo, debe subirse al directorio OBS antes de publicarse. La configuración config.json y el código de inferencia customize_service.py deben incluirse durante la publicación. Para obtener más información sobre cómo compilar config.json, consulte Especificaciones para compilar el archivo de configuración del modelo. Para obtener más información sobre el código de inferencia, consulte Código de inferencia.
Código de inferencia
En el archivo de código de inferencia de modelo customize_service.py, agregue una clase de modelo secundaria. Esta clase de modelo secundaria hereda las propiedades de su clase de modelo principal. Para obtener más información sobre las instrucciones de importación de diferentes tipos de clases de modelo padre, consulte Tabla 1.
# coding:utf-8 import collections import json import xgboost as xgb from model_service.python_model_service import XgSklServingBaseService class UserService(XgSklServingBaseService): # request data preprocess def _preprocess(self, data): list_data = [] json_data = json.loads(data, object_pairs_hook=collections.OrderedDict) for element in json_data["data"]["req_data"]: array = [] for each in element: array.append(element[each]) list_data.append(array) return list_data # predict def _inference(self, data): xg_model = xgb.Booster(model_file=self.model_path) pre_data = xgb.DMatrix(data) pre_result = xg_model.predict(pre_data) pre_result = pre_result.tolist() return pre_result # predict result process def _postprocess(self,data): resp_data = [] for element in data: resp_data.append({"predictresult": element}) return resp_data