Можно ли разрешить настраиваемым целевым функциям в XGBoost на основе python (настройка классификации) принимать конечные оценки в качестве аргументов (т.е. прогнозируемых значений), а не вероятности классов?
В частности, следующий код приводит XGBClassifier к вводу вероятностей класса (в форме оценки дерева мягкого максимума, я полагаю) в пользовательскую целевую функцию cost_func_obj.exec_func
model = XGBClassifier( obj=cost_func_obj.exec_func, n_estimators=n_trees )
model.fit(X_train, y_train,
eval_set=[(X_train, y_train), (X_test, y_test)],
eval_metric=eval_metric,
verbose=True )
, где цель имеет следующую подпись:
def exec_func(self, ys_true, ys_pred):
grad = self.compute_gradient(ys_true, ys_pred)
hess = self.compute_hessian(ys_true, ys_pred)
return grad, hess
(с ys_pred
матрицей вероятностей NxK для N примеров и K классов, автоматически поданных в функцию XGB)
Теперь все, что мне нужно, это заменить XGB ys_pred
по оценкам дерева, т.е. предположительно применяются значения до (!) softmax.
Я знаком с принципом basi c, по которому пользовательские цели реализуются в XGBoost, но пока мне не удалось найти подходящий способ сделать это, и связанные с этим проблемы, размещенные в сети, несколько отличались по объему.