Так что я относительно новичок в игре ML / AI в python, и в настоящее время я работаю над проблемой, связанной с реализацией пользовательской целевой функции для XGBoost.
Мои знания по дифференциальным уравнениям довольно ржавый, поэтому я создал пользовательскую функцию obj с градиентом и гессианом, которая моделирует среднеквадратичную функцию ошибки, которая запускается как целевая функция по умолчанию в XGBRegressor, чтобы убедиться, что я делаю все это правильно. Проблема в том, что результаты модели (выходные данные об ошибках близки, но по большей части не идентичны (и в некоторых моментах отключены). Я не знаю, что я делаю неправильно или как это возможно, если я Я правильно все вычисляю. Если бы вы все могли взглянуть на это, возможно, дать представление о том, где я неправ, это было бы здорово!
Исходный код без пользовательской функции:
import xgboost as xgb
reg = xgb.XGBRegressor(n_estimators=150,
max_depth=2,
objective ="reg:squarederror",
n_jobs=-1)
reg.fit(X_train, y_train)
y_pred_test = reg.predict(X_test)
и моя пользовательская целевая функция для MSE выглядит следующим образом:
def gradient_se(y_true, y_pred):
#Compute the gradient squared error.
return (-2 * y_true) + (2 * y_pred)
def hessian_se(y_true, y_pred):
#Compute the hessian for squared error
return 0*(y_true + y_pred) + 2
def custom_se(y_true, y_pred):
#squared error objective. A simplified version of MSE used as
#objective function.
grad = gradient_se(y_true, y_pred)
hess = hessian_se(y_true, y_pred)
return grad, hess
ссылка на документацию здесь
Спасибо!