Пользовательская цель XGBoost. Проблема градиента и гессиана

#python-3.x #xgboost

Вопрос:

Я пытаюсь создать свой 'objective' = оригинал 'objective': 'reg:squarederror' .

Результаты модели на моем 'objective' и на оригинале 'objective': 'reg:squarederror' очень разные.

Почему? Где я ошибся?

 def my_squarederror(y_pred, y_true):
    grad = 2*(y_pred - y_true)
    hess = 0*y_true   2
    return grad, hess

XGB_default_mse = xgboost.XGBRegressor().set_params(**{'objective': 'reg:squarederror'}) # original
XGB_my_mse = xgboost.XGBRegressor().set_params(**{'objective': my_squrederror}) # my
 

Комментарии:

1. это выглядит хорошо, хотя вы пытались изменить знак выпускника? Не то чтобы это следовало менять, но, возможно, стоит попробовать. кроме того, насколько сильно отличаются результаты? и ты починил семя?

2. Семя @Rafa исправлено. Измените знак градации, чтобы результаты были правильными! Спасибо тебе

Ответ №1:

 def my_squarederror(y_pred, y_true):
    grad = 2*(y_pred - y_true)
    hess = 0*y_true   2
    return -grad, hess