Я подозреваю, что вещь, которую вы находите запутанной, такова: вы можете видеть, где scikit-learn вычисляет отрицательный градиент функции потерь и подходит к базовой оценке к этому отрицательному градиенту. Похоже, что метод _update_terminal_region
отвечает за определение размера шага, но вы не можете увидеть нигде, он может решить проблему минимизации линейного поиска, как написано в документации.
Причина, по которой вы не можете найти поиск линии, заключается в том, что для частного случая регрессий дерева решений, которые являются только кусочно-постоянными функциями, обычно известно оптимальное решение. Например, если вы посмотрите на метод функции потери LeastAbsoluteError
, вы увидите, что листьям дерева присваивается значение взвешенной медианы разницы между y
и прогнозируемое значение для примеров, для которых этот лист имеет значение , Эта медиана является известным оптимальным решением.
Чтобы подвести итог, что происходит, для каждого градиентного спуска итерация выполняются следующие шаги:
Compute отрицательный градиент функции потерь в текущем прогнозе.
Fit a DecisionTreeRegressor
к отрицательному градиенту. Этот фитинг создает дерево с хорошими расколами для уменьшения потерь.
Замените значения на листах DecisionTreeRegressor
значениями, которые минимизируют потерю. Они обычно вычисляются по некоторой простой известной формуле, которая использует тот факт, что дерево решений является просто кусочно-постоянной функцией.
Этот метод должен быть не хуже, чем то, что описано в документах, но я думаю, что в некоторых случаях это может быть не идентично ему.
Ваш вопрос скорее о самом алгоритме Gradient Boosting или реализации sklearn? Вы можете ознакомиться с введением wekipedia (https://en.wikipedia.org/wiki/Gradient_boosting) для получения дополнительной информации об алгоритме. – hsc
@hsc Было бы более полезно, если бы вы ссылались на [статью в Википедии о поиске линии] (https://en.wikipedia.org/wiki/Line_search). Я уже читал обе статьи несколько раз. (На самом деле у меня довольно хорошее понимание повышения градиента в этот момент, когда поиск линии является единственной частью, которая ускользает от меня.) – Ben
Возможно, http://stats.stackexchange.com лучше подходит для этого вопроса – Sentry