2016-12-19 4 views
5

В this section документации на градиент повышения, он говоритКак scikitlearn осуществляет поиск линии?

Gradient Повышая попытки решить эту проблему минимизации численно с помощью градиентного спуска: наискорейшего спуска является отрицательный градиент функции потерь оценивается в текущей модели F_ {т-1}, которые могут быть вычислены для любой дифференцируемой функции потерь:

enter image description here

в случае, если шаг lengt ч \ gamma_m выбирается с помощью линейного поиска:

enter image description here

Я понимаю, цель поиска строки, но я не понимаю, сам алгоритм. Я прочитал source code, но он все еще не щелкает. Объяснение было бы очень оценено.

+0

Ваш вопрос скорее о самом алгоритме Gradient Boosting или реализации sklearn? Вы можете ознакомиться с введением wekipedia (https://en.wikipedia.org/wiki/Gradient_boosting) для получения дополнительной информации об алгоритме. – hsc

+1

@hsc Было бы более полезно, если бы вы ссылались на [статью в Википедии о поиске линии] (https://en.wikipedia.org/wiki/Line_search). Я уже читал обе статьи несколько раз. (На самом деле у меня довольно хорошее понимание повышения градиента в этот момент, когда поиск линии является единственной частью, которая ускользает от меня.) – Ben

+1

Возможно, http://stats.stackexchange.com лучше подходит для этого вопроса – Sentry

ответ

0

Реализация зависит от того, какую функцию потерь вы выберете при инициализации экземпляра GradientBoostingClassifier (используйте это, например, часть регрессии должна быть аналогичной). По умолчанию функция потерь равна 'deviance', и реализован соответствующий алгоритм оптимизации here. В функции _update_terminal_region простая итерация Newton реализована только с одним шагом.

Это ответ, который вы хотите?

0

Я подозреваю, что вещь, которую вы находите запутанной, такова: вы можете видеть, где scikit-learn вычисляет отрицательный градиент функции потерь и подходит к базовой оценке к этому отрицательному градиенту. Похоже, что метод _update_terminal_region отвечает за определение размера шага, но вы не можете увидеть нигде, он может решить проблему минимизации линейного поиска, как написано в документации.

Причина, по которой вы не можете найти поиск линии, заключается в том, что для частного случая регрессий дерева решений, которые являются только кусочно-постоянными функциями, обычно известно оптимальное решение. Например, если вы посмотрите на метод функции потери LeastAbsoluteError, вы увидите, что листьям дерева присваивается значение взвешенной медианы разницы между y и прогнозируемое значение для примеров, для которых этот лист имеет значение , Эта медиана является известным оптимальным решением.

Чтобы подвести итог, что происходит, для каждого градиентного спуска итерация выполняются следующие шаги:

  1. Compute отрицательный градиент функции потерь в текущем прогнозе.

  2. Fit a DecisionTreeRegressor к отрицательному градиенту. Этот фитинг создает дерево с хорошими расколами для уменьшения потерь.

  3. Замените значения на листах DecisionTreeRegressor значениями, которые минимизируют потерю. Они обычно вычисляются по некоторой простой известной формуле, которая использует тот факт, что дерево решений является просто кусочно-постоянной функцией.

Этот метод должен быть не хуже, чем то, что описано в документах, но я думаю, что в некоторых случаях это может быть не идентично ему.

0

Из ваших комментариев кажется, что сам алгоритм неясен, а не способ, которым scikitlearn реализует его.

Обозначение в статье wikipedia слегка неряшливо, одно не просто дифференцируется функцией, оцененной в точке. После того, как вы замените F_{m-1}(x_i) с \hat{y_i} и заменить частную производную с частной производной оцениваемой в \hat{y}=F_{m-1}(x) вещей становится яснее:

enter image description here

Это также удалить x_{i} (вид) из задачи минимизации и показывает намерение линейного поиска - оптимизировать в зависимости от текущего прогноза и не зависит от учебного набора. Теперь, обратите внимание, что:

enter image description here

Отсюда вы просто свести к минимуму:

enter image description here

Так строка поиска просто оптимизирует одну степень свободы вы (как только вы нашли правильный градиент направление) - размер шага.

Смежные вопросы