Вопрос

Я пытаюсь полностью понять метод повышения градиента (ГБ). Я прочитал несколько страниц вики и бумаги об этом, но это действительно поможет мне увидеть полный простой пример, который выполняет шаг за шагом. Может ли кто -нибудь предоставить мне один или дать мне ссылку на такой пример? Простой исходный код без сложной оптимизации также будет отвечать моим потребностям.

Это было полезно?

Решение

Я попытался построить следующий простой пример (в основном для моего понимания), который, я надеюсь, может быть полезен для вас. Если кто -то еще замечает какую -либо ошибку, дайте мне знать. Это как -то основано на следующем хорошем объяснении повышения градиента http://blog.kaggle.com/2017/01/23/a-kaggle-master-explains-gradient-boosting/

Пример направлен на предсказание заработной платы в месяц (в долларах), исходя из того, есть ли у наблюдения собственный дом, собственную машину и собственную семью/детей. Предположим, что у нас есть набор данных из трех наблюдений, где первая переменная «имеет собственный дом», вторая - «есть собственный автомобиль», а третья переменная - «иметь семейство/дети», а цель - «зарплата в месяц». Наблюдения есть

1.- (да, да, да, 10000)

2 .- (нет, нет, 25)

3 .- (да, нет, нет, 5000)

Выберите номер $ M $ Стадии повышения, скажем, $ M = 1 $. Анкет Первый шаг алгоритма повышения градиента - начать с начальной модели $ F_ {0} $. Анкет Эта модель постоянно определяется $ mathrm {arg min} _ { gamma} sum_ {i = 1}^3l (y_ {i}, gamma) $ В нашем случае, где $ L $ функция потери. Предположим, что мы работаем с обычной функцией потери $ L (y_ {i}, gamma) = frac {1} {2} (y_ {i}- gamma)^{2} $. Анкет Когда это так, эта константа равен среднему значению выходов $ y_ {i} $, так в нашем случае $ frac {10000+25+5000} {3} = 5008,3 $. Анкет Итак, наша первоначальная модель $ F_ {0} (x) = 5008,3 $ (который отображает каждое наблюдение $ x $ (например, (нет, нет, нет)) до 5008.3.

Далее мы должны создать новый набор данных, который является предыдущим набором данных, но вместо $ y_ {i} $ Мы берем остатки $ r_ {i0} =- frac { partial {l (y_ {i}, f_ {0} (x_ {i}))} { partial {f_ {0} (x_ {i}}} $. Анкет В нашем случае у нас есть $ r_ {i0} = y_ {i} -f_ {0} (x_ {i}) = y_ {i} -5008.3 $. Анкет Так что наш набор данных становится

1.- (да, да, да, 4991.6)

2 .- (нет, нет, -4983.3)

3 .- (да, нет, нет, -8.3)

Следующий шаг - соответствовать базовому ученику $ H $ к этому новому набору данных. Обычно базовым учащимся является дерево решений, поэтому мы используем это.

Теперь предположим, что мы построили следующее дерево решений $ H $. Анкет Я построил это дерево, используя формулы энтропии и получения информации, но, вероятно, я допустил некоторую ошибку, однако для наших целей мы можем предположить, что это правильно. Для более подробного примера, пожалуйста, проверьте

https://www.saedsayad.com/decision_tree.htm

Сконструированное дерево:

enter image description here

Назовем это дерево решений $ h_ {0} $. Анкет Следующий шаг - найти постоянную $ lambda_ {0} = mathrm {arg ; min} _ { lambda} sum_ {i = 1}^{3} l (y_ {i}, f_ {0} (x_ {i})+ Lambda {h_ {0} (x_ {i})}) $. Анкет Поэтому мы хотим постоянной $ lambda $ минимизация

$ C = frac {1} {2} (10000- (5008,3+ lambda*{4991.6}))^{2}+ frac {1} {2} (25- (5008,3+ lambda (-4983.3) ))^{2}+ frac {1} {2} (5000- (5008,3+ lambda (-8,3)))^{2} $.

Вот где градиент спуск пригодится.

Предположим, что мы начинаем с $ P_ {0} = 0 $. Анкет Выберите скорость обучения, равную $ eta = 0,01 $. Анкет У нас есть

$ frac { partial {c}} { partial { lambda}} = (10000- (5008,3+ lambda*4991.6)) (-4991,6)+(25- (5008,3+ lambda (-4983.3)))))))) *4983,3+(5000- (5008,3+ lambda (-8,3)))*8.3 $.

Тогда наше следующее значение $ P_ {1} $ дан кем-то $ P_ {1} = 0- eta { frac { partial {c}} { partial { lambda}} (0)} = 0-.01 (-4991.6*4991.7+4983.4*(-4983.3)+ (-8,3)*8,3) $.

Повторите этот шаг $ N $ раз, и предположим, что последнее значение $ P_ {n} $. Анкет Если $ N $ достаточно большой и $ eta $ тогда достаточно маленький $ lambda: = p_ {n} $ должно быть значение, где $ sum_ {i = 1}^{3} l (y_ {i}, f_ {0} (x_ {i})+ lambda {h_ {0} (x_ {i})}) $ минимизируется. Если это так, то наш $ lambda_ {0} $ будет равен $ P_ {n} $. Анкет Просто ради этого, предположим, что $ P_ {n} = 0,5 $ (чтобы $ sum_ {i = 1}^{3} l (y_ {i}, f_ {0} (x_ {i})+ lambda {h_ {0} (x_ {i})}) $ минимизируется в $ lambda: = 0,5 $) Следовательно, $ lambda_ {0} = 0,5 $.

Следующим шагом является обновление нашей первоначальной модели $ F_ {0} $ по $ F_ {1} (x): = f_ {0} (x)+ lambda_ {0} H_ {0} (x) $. Анкет Поскольку наше количество этапов усиления - это всего лишь одно, тогда это наша окончательная модель $ F_ {1} $.

Теперь предположим, что я хочу предсказать новое наблюдение $ x = $(Да, да, нет) (так что у этого человека есть собственный дом и собственная машина, но нет детей). Какова зарплата в месяц этого человека? Мы просто рассчитываем $ F_ {1} (x) = f_ {0} (x)+ lambda_ {0} H_ {0} (x) = 5008,3+0,5*4991.6 = 7504,1 $. Анкет Таким образом, этот человек зарабатывает 7504,1 доллара в месяц в соответствии с нашей моделью.

Другие советы

Как утверждает, следующая презентация - это «нежное» введение в повышение градиента, я обнаружил, что это довольно полезно при выяснении повышения градиента; Есть полностью объясненный пример.

http://www.ccs.neu.edu/home/vip/teach/mlcourse/4_boosting/slides/gradient_boosting.pdf

Этот это репозиторий, где находится пакет Xgboost. Это откуда, библиотека XGBOOST для таких крупных языков, как Юлия, Java, R и т. Д.

Этот это реализация Python.

Прогулка по исходному коду (как указано в документах «Как внести свой вклад»), поможет вам понять интуицию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с datascience.stackexchange
scroll top