import numpy as np import xgboost as xgb from typing import Tuple def gradient(predt: np.ndarray, dtrain: xgb.DMatrix) -> np.ndarray: y = dtrain.get_label() return (np.log1p(predt) - np.log1p(y)) / (predt + 1) def hessian(predt: np.ndarray, dtrain: xgb.DMatrix) -> np.ndarray: y = dtrain.get_label() return ((-np.log1p(predt) + np.log1p(y) + 1) / np.power(predt + 1, 2)) def squared_log(predt: np.ndarray, dtrain: xgb.DMatrix) -> Tuple[np.ndarray, np.ndarray]: predt[predt < -1] = -1 + 1e-6 grad = gradient(predt, dtrain) hess = hessian(predt, dtrain) return grad, hess xgb.train({'tree_method': 'hist', 'seed': 1994}, dtrain=dtrain, num_boost_round=10, obj=squared_log) # Using the custom objective function