пользовательская целевая функция для классификации в XGBoost с использованием значений оценок, а не вероятностей - PullRequest
0 голосов
/ 12 апреля 2020

Можно ли разрешить настраиваемым целевым функциям в 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, но пока мне не удалось найти подходящий способ сделать это, и связанные с этим проблемы, размещенные в сети, несколько отличались по объему.

...