Неотрицательная линейная регрессия с xgboost

#r #xgboost

#r #xgboost

Вопрос:

Это мой первый вопрос здесь, поэтому я прошу прощения, если он задан неправильно.

Я играю с xgboost функцией в R, и мне было интересно, есть ли простой параметр, который я мог бы изменить, чтобы моя линейная регрессия objective=reg:linear имела ограничение только на неотрицательные коэффициенты? Я знаю, что могу использовать nnls для неотрицательной регрессии методом наименьших квадратов, но я бы предпочел какое-то пошаговое решение, подобное тому, которое xgboost предлагает.
Если нет простого способа, а есть сложный, я тоже был бы рад это услышать. Я читал, что есть возможность создавать пользовательские целевые функции. Так что, может быть, вы могли бы изменить reg:linear функцию в какой-то момент, чтобы получить неотрицательность?

Заранее большое спасибо за ваш совет!

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

1. Это легко сделать с помощью преобразования. зарегистрируйте свою целевую переменную, и она изменится с положительной на неограниченную. Возведите свои результаты в степень, чтобы вернуть их к исходному масштабу.

2. Спасибо! Я действительно не думал об изменении своих данных. Я попробую это.

3. Это очень гибкий метод. Все, что ограничено только с одной стороны, может быть преобразовано (при необходимости перевернуто, а затем сдвинуто) в положительное, а затем занесено в журнал. Все, что ограничено с двух сторон, может быть масштабировано и сдвинуто в [0,1], а затем вы можете использовать логистическое преобразование.

4. На данный момент все мои данные ограничены [0, 1020000]. В моей объясняющей переменной и в моих независимых переменных тоже довольно много нулей. Итак, простое использование функции log в R не дает того эффекта, о котором я думаю?

5. Немного измените нули. Добавьте 1e-6 к ним что-нибудь.